无法在Django中获取AngularJS的$ http.post数据

时间:2014-11-04 18:59:20

标签: python django angularjs angularjs-http

我知道这是一个非常基本的问题,但在浪费了我一整天之后,我就是在问这个问题。我只是使用以下AngularJS代码向Django发送数据:

$http.post('/data/creation', 
                    {
                html: 'a'

            }).
              success(function(data, status, headers, config) {
                // this callback will be called asynchronously
                // when the response is available
                  console.log(data);
                  console.log(status);
                  console.log(headers);
                  console.log(config);
              }).
              error(function(data, status, headers, config) {
                // called asynchronously if an error occurs
                // or server returns response with an error status.
                  console.log(status);
                  console.log(data);
              });

和django:

@csrf_exempt
def snippets_post(request):
    html = False
    css = False
    js = False
    JSONdata = False
    response = "You're looking at the results of question %s."
    if request.method == 'POST':
        try:
            JSONdata = request.POST.get('data', False) # it was [] in actual
        except:
            JSONdata = 'ERROR'

    return HttpResponse(JSONdata)

我收到False作为回复,“通过在POST中将数据替换为html。结果相同”。我不知道这里出了什么问题。任何人都可以帮我这个吗?

谢谢

1 个答案:

答案 0 :(得分:5)

实际上,当我们使用$ http的POST从AngularJs发送数据时,它会将带有 content-type =" application / json" 的数据发送到服务器。而Django并不了解这种格式。因此,您无法获取已发送的数据。

解决方案是使用以下配置更改内容类型标头:

    app.config(['$httpProvider', function ($httpProvider) {
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
}]);