这个方法在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代码:

  • 可以包含在一个静态的.js文件中
  • 不需要在Django模板中
  • 可以包含在多个页面中
  • 适用于所有jQuery Ajax调用,无需修改个别调用
  • 包括与任何第三方jQuery库的工作
  • 到处都是一样的,在Django文档中很容易分享
  • 怎么运行的

    jQuery代码的额外复杂性是由于它在浏览器中运行,而无法访问任何Django变量。

    该代码通过附加到用于每个Ajax调用的jQuery事件来工作。 它从存储在浏览器中的cookie中查找csrftoken ,根据请求类型和主机确定是否发送令牌,并将令牌作为HTTP header发送,而不是将其包含在POST数据中。

    链接地址: http://www.djcxy.com/p/56541.html

    上一篇: what's wrong with this method for csrf token with ajax form post in django?

    下一篇: preprocess an Image in Django after upload