--摘web
第一次用Django作項目,遇到了不少問題。django
今天遇到的問題是Django在處理post請求時屢次出現403錯誤。服務器
我先描述一下問題出現的環境:我用Django寫了一個web服務端,姑且稱它爲API吧。我在實際測試中發現,經過get方式能夠從API中得到數據,可是post方式卻沒法獲取數據,客戶端顯示服務器端出現403錯誤。post
我找不出什麼緣由,只好新建了一個表單來測試post請求,我發現經過表單發送post請求時,頁面顯示403錯誤:Forbidden CSRF verification failed. Request aborted. 我在網上查了一下,大多數人的解決方式是:在settings.py裏面的MIDDLEWARE_CLASSES中加入‘django.middleware.csrf.CsrfResponseMiddleware’,我測試了一下,加入上面的代碼以後,表單提交確實沒有問題。可是我程序中調用API時,API仍然會返回403錯誤。我查了一下API中的代碼,肯定不是我寫的代碼的問題。而後我就疑惑了。不過我有一種感受,那就是settings.py裏面的MIDDLEWARE_CLASSES的配置有問題。我又在網上查了一下,有人說把‘django.middleware.csrf.CsrfViewMiddleware’,去掉能夠解決post方式出現的403錯誤。我試了一下,還真能夠。測試
如今總結一下解決方法:spa
1. 在settings.py裏面的MIDDLEWARE_CLASSES中加入「‘django.middleware.csrf.CsrfResponseMiddleware’,」;.net
2. 在settings.py裏面的MIDDLEWARE_CLASSES中去掉「‘django.middleware.csrf.CsrfViewMiddleware’,」。日誌
若是是解決表單提交時的出現的403錯誤「Forbidden CSRF verification failed. Request aborted.」,上面的兩種方式均可以解決,若是在其餘程序裏面單獨經過post方式請求數據,那就只能用第二種方式解決。csrf
另外我想補充的就是:第二種方式不須要以第一種方式爲前提,也就是在去掉 「’django.middleware.csrf.CsrfViewMiddleware’,」後能夠不用加入「’django.middleware.csrf.CsrfResponseMiddleware’」get