使用 django 的模板时,在每一个 POST form 表单中都需要添加{% csrf_token %}
,它的值是这样子的:
<input type="hidden" name="csrfmiddlewaretoken" value="plysVEeY1PoO8xOrmLKTAR109pHutKCL">
看下面的引用文章片段:
django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,
这样就能避免被 CSRF 攻击。
- 在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token
- 在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 tag, django 就会自动帮你生成,见下面)
- 在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.
- 在所有 ajax POST 请求里,添加一个 X-CSRFTOKEN header,其值为 cookie 里的 csrftoken 的值
看第2点,对照着你的问题:“我怎么样才能在easyui-datagrid里面把csrf一起提交?”,
我的回答是:
你可以在 POST 的时候添加一个 csrfmiddlewaretoken
参数,值为 plysVEeY1PoO8xOrmLKTAR109pHutKCL
。
至于这个值的获取(对于每个django都不一样):
- 可以随意看一个 django 模板中的表单,查看对应页面的源代码,即可看到。
- 根据引用的第1点,可查看 cookie 中的 csrftoken 字段值。