Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %
Posted
技术标签:
【中文标题】Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %【英文标题】:Django: CSRF token missing or incorrect. / avoid % csrf_token %Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token % 【发布时间】:2014-07-12 08:32:15 【问题描述】:我正在关注关于 Show me to do 的 Django 指南。但我有一个问题:
如果我只是复制他的代码,我会生成一个
禁止 (403) CSRF 验证失败。请求中止。
我已经通过添加解决了这个问题
context_instance=RequestContext(request)
对所有“我的”返回 render_to_response 并将标签 % csrf_token % 添加到我正在调用的表单中。
问题来了:我可以以任何方式将其设置为“在幕后”调用,还是必须将其添加到我的所有表单中?
【问题讨论】:
【参考方案1】:CSRF 是一个重要的安全概念 AFAIK。
您必须为所有使用 post、put 或 delete 请求的表单设置 csrf_token
[这将设置隐藏的 post 参数],或者您也可以使用 X-CSRFToken
标头。您可以使用render
快捷方式而不是render_to_response
默认包含RequestContext
。见:
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
有一种方法可以完全避免 CSRF 检查,方法是删除 middleware
或使用 decorator
.但我建议不要这样做。
【讨论】:
谢谢。但是对于您链接到的示例,我仍然必须在每次调用中做一些事情是不是可以定义我自己的 render_to_response ,只需在调用中添加 context_instance=RequestContext(request) ? 我认为没有后端解决方案,因为它也依赖于客户端以及 AFAIK。 CSRF 检查由django.middleware.csrf.CsrfViewMiddleware
处理,看看你是否可以扩展它以按照你的方式工作。【参考方案2】:
是的,您可以使用render(request, template, context)
而不是render_to_response
。 render
快捷方式自动使用 RequestContext。
【讨论】:
以上是关于Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %的主要内容,如果未能解决你的问题,请参考以下文章
Django:CSRF 令牌丢失或不正确。 / 避免 % csrf_token %
CSRF 令牌丢失或不正确。 Django + AngularJS
Django - 403 禁止。 CSRF 令牌丢失或不正确