使用JSON

时间:2015-07-19 19:25:04

标签: python json angularjs post django-rest-framework

我正在使用AngularJS以及Python& Django和Django REST API。 REST API创建了一个JSON文件,我需要使用Angular $ http.post()将数据发布到它中。

我需要知道是否可能。

我主要在帖子上获得403(禁止)和400(BAD REQUEST)错误..

$http({
       method: 'POST',
       url: '<JSON FILE URL>',
       data: $scope.tmpDataSet,
       headers: {'Content-Type': 'application/x-www-form-urlencoded'}

 }});

这是我的.post()方法。其中我从一个有角度的表单中获取数据并将其存储在&tttDataSet&#39;中。它被正确创建并且能够存储到数组中。我只是无法将其写入JSON文件。

我的JSON文件的结构是

{
    "count": 6,
    "next": null,
    "previous": null,
    "results": [
        {
            "name": "fff",
            "mobile_no": "fff",
            "email": "n@gmail.com",
            "message": "dfdf",
            "id": 1
        },
        {
            "name": "asd",
            "mobile_no": "0987654321",
            "email": "asd@gmail.com",
            "message": "no",
            "id": 2
        }
]

如果需要更多代码详情,请发表评论。

3 个答案:

答案 0 :(得分:1)

可以通过将CSRF令牌添加到角度应用程序并使用常规$http.post()函数和所有参数来解决此问题。

app.config(function($httpProvider) {
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});

$http.post('<URL>', item).error(function(data,status,headers,config){
            console.log('COULDNT POST!');
        }).success(function(data, status, headers, config){
            console.log('POSTED!');
        });

答案 1 :(得分:0)

这句话有点奇怪:

  

REST API创建了一个JSON文件,我需要使用Angular $ http.post()将数据发布到它中。

如果要将数据发布到Django,则需要为该视图定义视图和URL路由。类似的东西:

def page(request):
    if request.POST:
          .... do stuff with POST data

请注意,您必须将数据发布到视图,如果文件系统上有简单的JSON文件,则无法通过POSTING json添加数据。

答案 2 :(得分:0)

$ scope.tmpDataSet如何?由于您已为url-encoded

指定了Content-Type
   headers: {'Content-Type': 'application/x-www-form-urlencoded'}

这表示后端接收的数据不正确,因为您可能正在传递js对象/数组作为请求的主体。这可以解释你得到的400 Bad Request。

Url编码数据应采用

的形式
Key=Value+One&Key2=Value+Two

+表示空格。

如果您使用的是jQuery,可以尝试使用$.param()将Java对象转换为url编码的字符串

实施例

$http({
   method: 'POST',
   url: '<JSON FILE URL>',
   data: $.param($scope.tmpDataSet),
   headers: {'Content-Type': 'application/x-www-form-urlencoded'}
 }});

否则试试这个答案

https://stackoverflow.com/a/24964658/3371851