Angular资源发布数据但未通过django视图接收

时间:2015-09-15 06:19:01

标签: python angularjs django angular-resource

我创建了一个角色资源

var services = angular.module('Services', ['ngResource']).
// SEND_REPLY_SMS
factory('SendSMS', ['$resource', function($resource){
    return $resource('/bulk-sms/reply/', null,
    {
        send: {method: 'POST'},
    }
);
}]);

我用它作为

var data = $scope.data;
SendSMS.send({},data,
   function(data){
       console.log(data);
   },function(error){
       console.log(error);
   }
);

我已经检查过console.log(数据),数据包含数据,浏览器显示帖子请求已提交数据。

但是当我在django视图中收到它时,我无法在django视图中获取数据并且我的django视图是

class ReplySMSView(View):

    def post(self, request):
        data = request.POST.copy()
        print 'post data', request.POST # here data is not printed
        data = dict(data.items())
        return self.process(request, data)

    def get(self, request):
        data = request.GET.copy()
        print 'get data', request.GET # here data is not printed
        data = dict(data.items())
        return self.process(request, data)

    def process(self, request, data):
        dct = {}
        print data 
        model = IncomingMessage
        account = request.user.account
        contacts = data.get('contacts', '')
        contacts = contacts if contacts else get_contacts_by_filter(model, data)
        # TODO: get_contacts_by_filter is not working here for IncomingMessage
        message = data.get('message', '')
        identity = data.get('identity', '')
        if not contacts:
            dct['contacts'] = 'No contacts found.'
        if not message:
            dct['message'] = 'Message is required.'
        if not identity:
            dct['identity'] = 'Identity is required.'
        if dct:
            return HttpResponse(json.dumps(dct), content_type='application/json')
        response = send_bulk_sms(contacts, message, identity, account, module='bulk')
        return HttpResponse(response)

我在这段代码中没有问题?

2 个答案:

答案 0 :(得分:0)

AngularJS会将序列化的数据发布到JSON中,但django希望接收表单数据。如果您想接收该数据,您可以更改AngularJS的默认行为,不使用POST获取数据,而是使用request.body,或者您可以使用某些第三方软件包(如Django REST framework)为您完成工作。< / p>

答案 1 :(得分:0)

当调用ajax时,你在请求​​体中收到编码的json字符串,所以你需要使用python的json模块解码它来获取python dict。 由于django是一个网络framweork,它期望从表单中获取数据。

我真的建议使用这个框架http://www.django-rest-framework.org/

无论如何,在您的视图中获取发布数据将是这样的:

(Pdb) request.POST
<QueryDict: {}>
(Pdb) import json
(Pdb) json.loads(request.body)
{u'operator': u'pepe', u'password': u'1234', u'transport': u'LUUAAA'}
import json
class ReplySMSView(View):

    def post(self, request):
        data = json.loads(request.body)
        print 'post data', request.POST # here data is not printed
        data = dict(data.items())
        return self.process(request, data)