在发布之前,我已经尝试了在线发布的每种解决方案,包括Stackoverflow和Django上的解决方案。 (我认为错误的原因可能是因为我正在使用jQuery和django的新版本,大多数解决方案已经过时了,使用jQuery 1.9和django 1.5.1)
以下是一些不起作用的解决方案的URL:
Django CSRF check failing with an Ajax POST request
How to use $.post with django?
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
任何帮助将不胜感激。错误的另一种可能性是,我实际上并不确定在哪里准确地放置这些片段。到目前为止,我已经在文档加载中粘贴了jquery中的所有内容,我还尝试在.js文件的最开始粘贴代码。 (我的javascript代码在块中碎片化,有些是单独的.js文件,有些是与django上下文呈现的html内联,因此任何带有“{{csrftoken}}”的解决方案都不好。
谢谢!
答案 0 :(得分:2)
如果CSRF令牌存在于模板中或者视图使用ensure_csrf_cookie()
修饰,则只会设置CSRF令牌。将{% csrf_token %}
放入index.html
会使其适用于您的所有网页。
来自docs:
CSRF令牌也存在于DOM中,但只有在模板中使用csrf_token明确包含时才会出现。
...
如果您的视图没有呈现包含csrf_token模板标记的模板,Django可能不会设置CSRF令牌cookie。这在表单动态添加到页面的情况下很常见。为了解决这种情况,Django提供了一个视图装饰器来强制设置cookie:ensure_csrf_cookie()。
答案 1 :(得分:1)
你可以试试这个:
$.ajax({
type: "POST",
url: '{% url "some_url_which_accepts_post" %}',
data: {'csrfmiddlewaretoken': '{{csrf_token}}', 'comment_id':1},
success: function(data, textStatus){
//something
},
});