我从我的站点上的CSRF Django中间件(来自SVN中继的版本)中遇到了很多故障.我得到的唯一错误是:CSRF失败:原因= CSRF令牌丢失或不正确.
我怎么能诊断这些CSRF错误来自哪里?我自己不能导致CSRF错误,但是我设置网站只要触发CSRF错误视图就给我发电子邮件,所以我知道它经常发生.
我真的很努力地把它做对,但最终做到了.这是我的主要问题(Django 1.2测试版):
根据您使用的Django版本,确保您的中间件正确.这在Django的在线文献中有很好的介绍.
确保每个表单中都有{%csrf_token%},只需在表单的开始标记后面
这是我的主要问题,请确保所有表单都有一个首页,即不要在表单中执行action ="".
确保您的设置电子邮件都是正确的.我不得不这样做:
EMAIL_HOST ='mail.my-domain.com''MAMAIL_HOST_USER ='我在服务器上的用户名'EMAIL_HOST_PASSWORD ='passwd'EMAIL_PORT = '26'#在我阅读的许多论坛帖子中经常好像是25或26#DEFAULT_FROM_EMAIL =' noreply@domain.com'#在托管域名上,确保已设置并发送SERVER_EMAIL ='noreply @ domain.com'#与上述相同的电子邮件
将request_context添加到render_to_response的末尾
return render_to_response('contact.htm',{'favicon':r'____.ico','more_stuff':"......"'more_stuff':"......"'more_stuff':" ......"}, context_instance = RequestContext(request))
确保你有:
TEMPLATE_CONTEXT_PROCESSORS = ( "django.contrib.auth.context_processors.csrf", ..... )
在您的settings.py文件中.
请注意,这实际上不是如何,这正是我为了让我的工作所做的.现在发布它的原因是我在讨论这个话题的论坛上看到很多人诉诸于关闭csrf_token.