我想通过Http请求将数据从AngularJS发送到后端(Django)。
我尝试了很多方法但是在django中收到请求时我一直没有收到发送的数据。
在粘贴代码之前,我刚刚更改了项目中AngularJS中的配置,如下所示
var myApp = angular.module('myApp',[]).config(['$httpProvider', '$interpolateProvider', function ($httpProvider, $interpolateProvider) {
$interpolateProvider.startSymbol('{/');
$interpolateProvider.endSymbol('/}');
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';}]);
urlpatterns = [
url(r'^save_comment/', views.save_comment, name='save_comment'),]
$scope.submit_comment = function () {
$http({
method: "POST",
url: 'save_comment',
data: $.param({
'fish_id' : "1"
})
}).success(function (response) {
console.log(response.result);
}).error(function () {
console.log("failed")
}); }
def save_comment(request):
data = request.POST.get('fish_id')
return JsonResponse({'result': data}, content_type="application/json", safe=False)
但我没有得到任何结果。控制台给了我这个错误:
POST http://127.0.0.1:8000/brain_browser/save_comment 500(内部 服务器错误)
那么我应该怎样做才能将Post数据从Angular发送到Django?
感谢dvance。
答案 0 :(得分:0)
不是答案,但您可以自行调试。将其添加到settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
答案 1 :(得分:0)
您的url: 'save_comment'
似乎在开头缺少斜线,因为您的网址预计为http://127.0.0.1:8000/save_comment/
,但由于您发送http://127.0.0.1:8000/brain_browser/save_comment
而丢失了斜杠。
因此,请将Javascript中的url
更改为url: '/save_comment/'
编辑:@ bobleujr的答案也可以解决问题,如果csrf令牌是问题。在我个人的Angular / Django项目中,我只是把它放在我的javascript的最顶端:
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);
第二次编辑:这应该是解决方案
在您的观看中,请执行此操作而不是data = request.POST.get('fish_id')
:
body_unicode = request.body.decode('utf-8')
data = json.loads(body_unicode)
# Work with "data" from now on, i.e:
print(data["fish_id"])
这是因为request.body(您的参数)是一个字节字符串,而json.loads不接受字节字符串。
另外,请确保您在最高端的视图中导入json
,如下所示:
import json