2015-07-19 49 views
2

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

我需要知道它是否可能。

林majorly上后得到403(禁止)和400(错误请求)错误..

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

}}); 

这是我的。员额()方法。在那里im从一个形式的角度获取数据,并将其存储在'tmpDataSet'中。它被正确创建并能够存储到数组中。我只是无法将其写入JSON文件。

我的JSON文件的结构是

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

如果需要更多的代码细节请评论。

回答

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!'); 
     }); 
+0

哈哈..我现在知道了。 #MyFrontEndDeveloper &&合作伙伴 –

0

有一些奇怪的这个说法:

存在通过REST API创建的JSON文件,我需要将数据上传到它采用了棱角分明$ http.post()。

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

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

注意,你有POST数据到一个视图,如果你的文件系统的一个简单的JSON文件,你不能张贴JSON将它添加数据。

+0

我已经使用Django的REST框架来创建API,其提供类似的GET,POST功能。它将数据序列化为JSON格式。我ANgular消费API,现在我在Angular中使用POST函数,我是否仍然需要创建一个函数来接受django视图中的数据? –

+0

您的POST请求是否应该修改服务器上的数据,或者您是否像使用GET一样使用它?如果它修改了任何内容,那么你需要编写服务器端代码。 – browskie

+0

它应该将数据添加到数据库。 –

0

$ scope.tmpDataSet是怎么样的?既然你指定的内容类型为网址编码,

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

这表明,因为你可能被传递一个JS对象/数组作为请求的身体在你的后端接收到的数据是不正确的。这将解释您收到的400错误请求。

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

+0

我试过这样做,但我得到一个错误 - $没有定义。 –

+0

然后你不使用jQuery?在你的html文件之前添加这个 soaP

+0

这帮助了很多,我能够通过使用POST数据岗位职能有效地发挥作用。 :) –

相关问题