您的位置:首页 > 编程语言 > Go语言

关于Django中Csrf问题的解决方法

2012-10-25 15:16 447 查看
最近在用Django做表单POST提交处理的时候,遇到了CSRF verification failed request aborted这样的错误信息提示,然后看了网的一些解决方法,都没有解决掉。后来才发现,网上的方法,都是解决之道的一部分。所以我便整理出完整的解决步骤供大家参考。
什么是Csrf呢,中文名称叫做跨站请求伪造。它在django中的工作原理,我在这里就不说了。可以直接看Django Book这本书的第十六章集成的子框架 django.contrib.好了下面就说解决方法:

首先:找到settings.py文件并打开,找到MIDDLEWARE_CLASSES,确保下面的代码没有被注释掉,如果注释了,请去掉注释。
MIDDLEWARE_CLASSES = (
'django.middleware.csrf.CsrfMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
)
在这里只要确保Csrf的中间键是被加载的就好。有些情况下只需要一个元素即可,可以自己进行调试。

然后:就是要找到你有Form表单的模板,在Form表单中加入{% csrf-token %},这是传统的加法。如果为了和表单的格式保持一致可以采用下面方法加入csrf-token,这也是我个人比较喜欢的方法:
<div style="display:none">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}"/>
</div>
以表单隐藏字段的方式提交csrf-token.

最后一步,就是在你的View视图中涉及表单处理的视图函数处理Http请求时应该这样写:
from django.shortcuts import RequestContext
return render_to_response('xxx.html',locals(),context_instance=RequestContext(request))

做好上面三部,相信就能很好的解决掉Csrf问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: