问题描述
注意:这是针对Django 1.6
我试图弄清楚当Django DEBUG设置设置为true时为什么不在我们的网站上生成CSRF令牌的原因。
某些背景:CSRF令牌的完成方式不像Django文档中所建议的那样(但是,我也尝试过这样做)。它们是在表单的 init 函数内部完成的,如下所示:
from django.middleware import csrf
self.fields['csrfmiddlewaretoken'].initial = csrf.get_token(self.request)
完成执行顺序后,我发现
- 当DEBUG为True时:此初始化发生在csrf中间件运行之前。 在这种情况下,运行上面的代码时,csrf.get_token(self.request)返回None。
- 当DEBUG为False时:初始化发生在csrf中间件运行之后。 在这种情况下,运行上面的代码时,csrf.get_token(self.request)返回正确的CSRF令牌。
我还尝试过删除上述添加csrf令牌的方法,而是按照Django请求的方式进行操作,即通过在表单中添加{%csrf_token%}来实现,但事实并非如此。
这里可能是什么问题?与应用程序本身的初始化相比,是什么决定了中间件的运行顺序?
随时询问更多信息。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)