Python 使用Django Angular对视图进行AJAX调用

Python 使用Django Angular对视图进行AJAX调用,python,django,angularjs,Python,Django,Angularjs,我试图使用Django Angular对Django中的视图进行AJAX调用。我遵循这个指南 然而,当我发表帖子时,我得到的信息是:CSRF验证失败。请求已中止。似乎没有调用过程中描述的操作,因为我不需要令牌 有人能发现这个问题吗,下面是我到目前为止尝试过的 以下是相关的js控制器脚本: var in_data = {action: 'process_something', somevar: $scope.somevar}; var post_call = CbgenRestangu

我试图使用Django Angular对Django中的视图进行AJAX调用。我遵循这个指南

然而,当我发表帖子时,我得到的信息是:CSRF验证失败。请求已中止。似乎没有调用
过程中描述的
操作
,因为我不需要令牌

有人能发现这个问题吗,下面是我到目前为止尝试过的

以下是相关的js控制器脚本:

   var in_data = {action: 'process_something', somevar: $scope.somevar};
   var post_call = CbgenRestangularDjango.all('pin-verification/').post(in_data)
<form ng-controller="PinValidationFormCtrl"  name="CompanyValidPinForm" class="bs-callout">
        <div class="col-xs-2">
            <input class="form-control" name="somevar" ng-model="somevar" type="text">
        </div>

        <div class="col-xs-2">
            <button type="button" class="btn btn-default" ng-click="submitPin()">Verify Pin</button>
        </div>
</form>
和表单:

   var in_data = {action: 'process_something', somevar: $scope.somevar};
   var post_call = CbgenRestangularDjango.all('pin-verification/').post(in_data)
<form ng-controller="PinValidationFormCtrl"  name="CompanyValidPinForm" class="bs-callout">
        <div class="col-xs-2">
            <input class="form-control" name="somevar" ng-model="somevar" type="text">
        </div>

        <div class="col-xs-2">
            <button type="button" class="btn btn-default" ng-click="submitPin()">Verify Pin</button>
        </div>
</form>

您很可能在angular的应用程序模块配置中缺少标题

尝试设置以下选项

.config(function($httpProvider) {
  $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
});
Django应用程序不需要此标头,但如果缺少此标头,则对:
request.is\u ajax()
的所有调用都将返回False,即使对于完全有效的ajax请求也是如此

可在此处找到: 此外,angular版本>=1.1.x时也发生了api更改(自该版本以来,此标头默认值已被删除)。也许Django并没有在每个部分都跟上他们的文档



可能您只需要清除浏览器缓存,因为您可能有一个过时的cookie发送了一个无效的令牌,导致请求映射失败。

在发送HTTP POST请求时,您必须传递csrf令牌

在表单中包括
{%csrf\u token%}
或添加自定义头
X-CSRFToken
。这应该是可行的。

方法接受一个配置参数来传递
X\u CSRFTOKEN
头:

var config = { headers : { 'X_CSRFTOKEN' : $cookies.csrf_token }};
var in_data = {action: 'process_something', somevar: $scope.somevar};
var post_call = 
CbgenRestangularDjango.all('pin-verification/').post(in_data, config);
在视图的模板中,表单必须包含令牌,如下所示:

<form ...>
    {% csrf_token %}
    ...
</form>

{%csrf_令牌%}
...

注意
$cookies
取决于
ngCookies
(请参阅)

您也可以尝试/使用
@csrf\u-employ
装饰器

-->

下面是Django文档,介绍如何将其应用于基于类的视图=)


@Stewie我想问题很清楚,你可以看到我已经尝试过了。我不确定你为什么发表评论,请详细说明。谢谢。你按规定安装了angular应用程序吗?是的@mariodev,我有:)。我让Django Angular处理正常的GET请求,但出于某种原因,它没有在正在发布的帖子视图中调用process_something函数,我认为这就是为什么我将CSRF消息作为[@]未运行允许的\u操作。当您使用
@csrf\u emption
处理\u某物时,POST请求是否有效?(如果用
csrf\u-emption
装饰基于类的视图的方法不起作用,请尝试)尝试post请求的(firebug)屏幕截图也会很有帮助。您尝试过这个吗?我删除了这个答案好几天了,但我仍然很好奇这是否是问题所在,所以我重新激活了它。