通过邮件将数据从AngularJs发送到Django

时间:2017-08-31 11:55:41

标签: angularjs django

我想通过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'),]

以Angular发送Https POST:

$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。

2 个答案:

答案 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