Django没有读取Restangular POST数据

时间:2014-01-03 01:53:05

标签: angularjs rest post restangular

我做了很多搜索,似乎没有什么能够完全解决这个问题。我创建了一个REST API,它有一个发送消息的资源。路径为/api/v1/conversation/{type}/{id}/message。对该URI发出POST调用将为给定的对话创建一条消息。

如果我只使用$.post('/api/v1/conversation/sample/sample/message', {message: "All your base are belong to us"});

,一切都会很有效

但是,我想使用Restangular,并且出于某种原因,它以我必须使用request.body而不是request.POST.get('message')的方式发送POST数据。如果我必须对每个服务器端API执行此操作,这非常不方便。

这是我的Restangular代码:

conversation = Restangular.one('conversation', scope.type).one(scope.type_id);
conversation.post('message', {message: "All your base..."})

为了澄清,它正在POST到正确的URI,它只是将发布数据作为有效负载而不是表单数据发送。如何配置它以将帖子作为表单数据发送?

编辑: 作为旁注,我能够通过创建实用程序函数来缓解此问题:

def api_fetch_post(request):
    post = request.POST
    if not post:
        try:
            post = json.loads(request.body.decode(encoding='UTF-8'))
        except:
            pass
    return post

这样我可以接受任何类型的POST数据。无论如何,有没有办法用Restangular发送表单数据?

1 个答案:

答案 0 :(得分:2)

是的,有。

var formData = new FormData();
formData.append('message', $scope.message);
// Or use the form element and have formData = new FormData(formElement).

Restangular.one('conversation', $scope.type).one($scope.type_id)
       .withHttpConfig({transformRequest: angular.identity})
       .post(formData, null, {'Content-Type': undefined})
       .then(function(response){
           // Do something with response.                    
});