我最近升级到 Django 1.2.3,我的上传表单现在坏了。每当我尝试上传时,我都会收到“CSRF 验证失败。请求已中止。”错误信息。
看完Django's documentation在这个主题上,它声明我需要在 HTML <form>
中添加 {% csrf_token %} 模板标签在我的模板中。不幸的是,我的<form>
是通过 JavaScript 生成的(具体来说,是 ExtJs 在面板上的“html”属性)。
长话短说,如何将所需的 CSRF token 标记添加到我的 <form>
当我的<form>
不包含在 Django 模板中?
最佳答案
另一种选择是调整 the Django docs 中所示的基于 cookie/ header 的解决方案使用 Ext - 如果您有很多模板并且不想更改每个模板,则更可取。
只需将以下代码片段放入您的 overrides.js(或您放置全局修改的任何位置):
Ext.Ajax.on('beforerequest', function (conn, options) {
if (!(/^http:.*/.test(options.url) || /^https:.*/.test(options.url))) {
if (typeof(options.headers) == "undefined") {
options.headers = {'X-CSRFToken': Ext.util.Cookies.get('csrftoken')};
} else {
options.headers.extend({'X-CSRFToken': Ext.util.Cookies.get('csrftoken')});
}
}
}, this);
(edit: Ext已经有cookie读取功能,不用再复制了)
关于javascript - 如何在 Javascript 生成的 HTML 表单中包含 Django 1.2 的 CSRF token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764589/