【发布时间】:2013-03-21 05:13:03
【问题描述】:
我不断收到来自 Django 的 403 错误。
我设置了我的 settings.py 以使用 CSRF 保护,并在我的模板中使用了 csrf_token 令牌。
这是我在 HTML 标头之后包含的 JS 文件:http://bpaste.net/show/87791/
使用 Firebug 我可以检查 CSRF cookie 是否存在。稍后在页面上,用户单击触发此代码的按钮:
myFunction: function() {
$.ajax({
type: 'POST',
url: window.localtion.href + 'myajaxview',
async: false
});
}
我正在使用从 TemplateView 继承的基于类的简单视图来显示此页面。 'myajaxview' 继承自 View 和 JSON Mixin。但是它的代码永远不会执行,因为 django 无法验证 CSRF 令牌。
在我看来,ajax 并没有按照应有的方式发送带有 POST 标头的令牌。还是我错过了什么?
编辑:我在调用 $.ajax() POST 函数之前移动了 $.ajaxSetup 调用,它起作用了。我试图将它移到其他地方,但失败了。我认为这个问题与 Ajax 的关系比与 Django 的关系更大。 所以,我的问题仍然存在,我不想把 $.ajaxSetup 调用放在每个 $.ajax 调用之前,我不认为这是事情的处理方式,我不想重复自己。所以这只是一种解决方法,我正在寻求解决方案。
【问题讨论】:
-
你可能想看看 csrf_exempt here
-
已经看到了,如果你在 bpaste 上查看我的代码,它几乎是一样的。不同之处在于我将其包含为外部 .js 文件。因为我想共享该功能,并且每次在每个模板中执行 ajax 请求时都不包含相同的代码。也许这就是问题?使用 ajax 时将 csrf_token 放在哪里?以及将 getCookie 代码放在哪里(即:仅当我做错时)?
标签: jquery django csrf django-csrf