關於Django中Csrf問題的解決方法

最近在用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問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章