【问题标题】:How to send json data from Angularjs post to Django view?如何将 Angularjs 帖子中的 json 数据发送到 Django 视图?
【发布时间】:2016-10-13 20:35:14
【问题描述】:

我需要使用来自 Angularjs 的 POST 请求将 json 数据发送到我的 Django 视图。

我需要使用这个 json 作为 json 格式从数据库中获取数据。

我尝试了一些使用来自网络资源的示例:

JS代码:

$http({
   method: 'POST',
   url: '/mycard/list',
   data:  $.param({test: json})
});

Python 代码(Django 视图):

def product_list(request):
   if len(request.META['QUERY_STRING']) > 0:
       data = request.body
       data = json.loads(data)
       print data
   else:
       f = open('./mytest.txt','r')
       data = f.read()

   return HttpResponse(data, mimetype='application/json')

但它返回 403 错误,有时它返回 500 错误(INTERNAL SERVER ERROR)

【问题讨论】:

    标签: javascript python angularjs json django


    【解决方案1】:

    服务代码

    var promise = $http({
                          method: 'post',
                          url: '/mycard/list',
                          data:data,
                          contentType:'application/json; charset=UTF-8',
                        });
    return promise;
    

    Python 休息接口

    @csrf_exempt
    @api_view(['GET','POST'])
    def product_list(request):
    
        if request.method == 'POST':
            try:
                stream = StringIO(request.body)
                data = JSONParser().parse(stream)
            except ValueError:
                return Response(json.dumps(ValueError, default=json_util.default))
            return Response(json.dumps(data, default=json_util.default))
        else:        
            return Response("failure")
    

    【讨论】:

      【解决方案2】:

      您的 json 数据应采用 JSON.stringify() 格式,如下所示:

      $http({
         method: 'POST',
         url: '/mycard/list',
         data:  JSON.stringify({test: json})
      });
      

      【讨论】:

        【解决方案3】:
        • 403 Forbidden 可能是因为 CSRF 令牌无效
        • 500 :您可能没有以后端期望的格式发布数据。您能否检查一下它给出的错误响应是什么。

        【讨论】:

          猜你喜欢
          • 2016-08-11
          • 1970-01-01
          • 2019-04-25
          • 1970-01-01
          • 2012-05-18
          • 2018-04-24
          • 2013-07-10
          • 1970-01-01
          • 2018-01-24
          相关资源
          最近更新 更多