这个方法在django中用ajax表单发布csrf token有什么问题?
我一直在寻找几天现在如何使用jQuery将表单提交转换为ajax,并且csrf令牌问题令我困惑。
我通过添加这里找到的JavaScript代码解决了问题:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
但是,当绊倒在stackoverflow,我发现更简单的答案(不是第一个):Django的CSRF检查失败与Ajax POST请求
一些答案建议简单地将以下内容添加到发布数据中:csrfmiddlewaretoken:'{{csrf_token}}'
但是,这看起来好得难以置信,如果那很容易,为什么我们需要复制django网站的长片段? 还有一个关于静态JS的回复之一的快速评论。 我真的不明白。
任何人都可以解释为什么最简单的解决方案不是最好的,并给出一些实际的例子?
谢谢
这两种解决方案实际上正在做同样的事情。 在请求中将csrftoken
提供给Django。 他们只是以不同的方式去做。
'更简单'选项
对于Django模板中的单个jQuery调用,使用{{ csrf_token }}
标签添加到发布数据可能会更简单。 但是,一旦有多个地方有多个电话,就很难维护。
jQuery代码
另一方面,jQuery代码:
怎么运行的
jQuery代码的额外复杂性是由于它在浏览器中运行,而无法访问任何Django变量。
该代码通过附加到用于每个Ajax调用的jQuery事件来工作。 它从存储在浏览器中的cookie中查找csrftoken
,根据请求类型和主机确定是否发送令牌,并将令牌作为HTTP header
发送,而不是将其包含在POST
数据中。
上一篇: what's wrong with this method for csrf token with ajax form post in django?