什么是Csrf呢,中文名称叫做跨站请求伪造。它在django中的工作原理,我在这里就不说了。可以直接看Django Book这本书的第十六章集成的子框架 django.contrib.好了下面就说解决方法:
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问题。