在调试模式下,CSRF令牌为null-Django 1.6

问题描述

注意:这是针对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 (将#修改为@)