第一次用Django做項目,遇到了很多問題。
今天遇到的問題是Django在處理post請求時多次出現(xiàn)403錯誤。
我先描述一下問題出現(xiàn)的環(huán)境:我用Django寫了一個web服務端,姑且稱它為API吧。我在實際測試中發(fā)現(xiàn),通過get方式可以從API中獲得數(shù)據(jù),但是post方式卻無法獲取數(shù)據(jù),客戶端顯示服務器端出現(xiàn)403錯誤。
我找不出什么原因,只好新建了一個表單來測試post請求,我發(fā)現(xiàn)通過表單發(fā)送post請求時,頁面顯示403錯誤:Forbidden?CSRF verification failed. Request aborted. 我在網(wǎng)上查了一下,大多數(shù)人的解決方式是:在settings.py里面的MIDDLEWARE_CLASSES中加入‘django.middleware.csrf.CsrfResponseMiddleware’,我測試了一下,加入上面的代碼之后,表單提交確實沒有問題。但是我程序中調(diào)用API時,API仍然會返回403錯誤。我查了一下API中的代碼,確定不是我寫的代碼的問題。然后我就疑惑了。不過我有一種感覺,那就是settings.py里面的MIDDLEWARE_CLASSES的配置有問題。我又在網(wǎng)上查了一下,有人說把‘django.middleware.csrf.CsrfViewMiddleware’,去掉可以解決post方式出現(xiàn)的403錯誤。我試了一下,還真可以。
現(xiàn)在總結(jié)一下解決方法:
1.?在settings.py里面的MIDDLEWARE_CLASSES中加入“‘django.middleware.csrf.CsrfResponseMiddleware’,”;
2. 在settings.py里面的MIDDLEWARE_CLASSES中去掉“‘django.middleware.csrf.CsrfViewMiddleware’,”。
如果是解決表單提交時的出現(xiàn)的403錯誤“Forbidden CSRF verification failed. Request aborted.”,上面的兩種方式都可以解決,如果在其他程序里面單獨通過post方式請求數(shù)據(jù),那就只能用第二種方式解決。
另外我想補充的就是:第二種方式不需要以第一種方式為前提,也就是在去掉 “’django.middleware.csrf.CsrfViewMiddleware’,”后可以不用加入“’django.middleware.csrf.CsrfResponseMiddleware’”
分類:?python