【问题标题】:Restangular POST data not being read by DjangoDjango没有读取Restangular POST数据
【发布时间】:2014-01-03 01:53:04
【问题描述】:

我进行了很多搜索,但似乎没有什么可以完全解决这个问题。我创建了一个 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..."})

为了澄清,它正在向正确的 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 发送表单数据?

【问题讨论】:

  • Restangular 是如何解决这个问题的。因为下面的解决方案现在正在运行。

标签: angularjs rest post restangular


【解决方案1】:

是的,有。

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.                    
});

【讨论】:

  • 我将 formdata 与 post 一起使用,它将对象对象附加到 url 给我 404。所以我用 customPOST 尝试了它,但结果是相同的 django 无法解析请求,因为它发送了一些奇怪的 webkit 内容处置等等。
猜你喜欢
  • 2015-01-01
  • 2014-11-28
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2015-09-26
  • 1970-01-01
相关资源
最近更新 更多