javascript - 如何在 Javascript 生成的 HTML 表单中包含 Django 1.2 的 CSRF token ?

标签 javascript django extjs csrf django-csrf

我最近升级到 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/

相关文章:

javascript - Angular 5 多输入验证

python - Django Tastypie : reverse url with "spaces". 怎么样?

django - timesince 过滤器的格式

android - 如何使用 cordova 和 Sencha 构建一个正常的准备好存储的应用程序

asp.net - 禁用浏览器的后退按钮

javascript - 不使用服务器进行身份验证

javascript - Opera 中的慢速滚动(11)使用固定位置和文本阴影

python - Django 管理日期范围过滤器

javascript - Sencha Touch - 菜单和边缘滑动错误

json - 在 Ext.data 的上下文中,JsonStore 和 JsonReader 之间的基本区别是什么?