我正在使用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
}
]
如果需要更多代码详情,请发表评论。
答案 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'}
}});
否则试试这个答案