第一次用Django做項(xiàng)目渴语,遇到了很多問(wèn)題惯悠。
今天遇到的問(wèn)題是Django在處理post請(qǐng)求時(shí)多次出現(xiàn)403錯(cuò)誤相满。
我先描述一下問(wèn)題出現(xiàn)的環(huán)境:我用Django寫了一個(gè)web服務(wù)端抠藕,姑且稱它為API吧墩朦。我在實(shí)際測(cè)試中發(fā)現(xiàn),通過(guò)get方式可以從API中獲得數(shù)據(jù)绊谭,但是post方式卻無(wú)法獲取數(shù)據(jù)政恍,客戶端顯示服務(wù)器端出現(xiàn)403錯(cuò)誤。
我找不出什么原因达传,只好新建了一個(gè)表單來(lái)測(cè)試post請(qǐng)求篙耗,我發(fā)現(xiàn)通過(guò)表單發(fā)送post請(qǐng)求時(shí),頁(yè)面顯示403錯(cuò)誤:Forbidden?CSRF verification failed. Request aborted. 我在網(wǎng)上查了一下宪赶,大多數(shù)人的解決方式是:在settings.py里面的MIDDLEWARE_CLASSES中加入‘django.middleware.csrf.CsrfResponseMiddleware’,我測(cè)試了一下宗弯,加入上面的代碼之后,表單提交確實(shí)沒(méi)有問(wèn)題搂妻。但是我程序中調(diào)用API時(shí)蒙保,API仍然會(huì)返回403錯(cuò)誤。我查了一下API中的代碼欲主,確定不是我寫的代碼的問(wèn)題邓厕。然后我就疑惑了。不過(guò)我有一種感覺扁瓢,那就是settings.py里面的MIDDLEWARE_CLASSES的配置有問(wèn)題邑狸。我又在網(wǎng)上查了一下,有人說(shuō)把‘django.middleware.csrf.CsrfViewMiddleware’,去掉可以解決post方式出現(xiàn)的403錯(cuò)誤涤妒。我試了一下,還真可以赚哗。
現(xiàn)在總結(jié)一下解決方法:
1.?在settings.py里面的MIDDLEWARE_CLASSES中加入“‘django.middleware.csrf.CsrfResponseMiddleware’,”她紫;
2. 在settings.py里面的MIDDLEWARE_CLASSES中去掉“‘django.middleware.csrf.CsrfViewMiddleware’,”。
如果是解決表單提交時(shí)的出現(xiàn)的403錯(cuò)誤“Forbidden CSRF verification failed. Request aborted.”屿储,上面的兩種方式都可以解決贿讹,如果在其他程序里面單獨(dú)通過(guò)post方式請(qǐng)求數(shù)據(jù),那就只能用第二種方式解決够掠。
另外我想補(bǔ)充的就是:第二種方式不需要以第一種方式為前提民褂,也就是在去掉 “’django.middleware.csrf.CsrfViewMiddleware’,”后可以不用加入“’django.middleware.csrf.CsrfResponseMiddleware’”
分類:?python