什麼是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問題。