[Python] [Django] Django將post請求變成get


[Python] [Django] [Django將post請求變成get的奇妙冒險]

通過requests庫向Django后台服務器發送post請求,請求url如下

http://10.16.195.51:8000/hsvltnprjct/shutdown

請求方法如下

import requests
url = "http://10.16.195.51:8000/hsvltnprjct/shutdown"
data = {"task_id":"24123-234123-4124312"}
headers = {"Content-Type":"application/json"}
requests.post(url=url, headers=headers, data=data)

在服務端一直走get請求邏輯,於是我嘗試通過中間件來判斷,請求方式

在中間件最上方加一個中間件,打印request.META,發現會收到兩個請求,一個post,一個get。

然后將中間件方法放在中間件最后,發現只會收到一個get請求。

說明django服務最開始確實收到了post請求,只不過在中間被重定向為get請求了。

查閱了一系列完整,發現了django的一個小細節,在url定向的時候,如果末尾不是‘/’,會被系統重定向到帶‘/’的url,即301,然后空的請求被重定向,就變成了get。

比如本來是’/sudoku/‘結果我的目標是’/sudoku’,這就會出問題

如果還有問題的話 加上裝飾器 @csrf_exempt

django中也有這一點的配置,APPEND_SLASH

django默認地會將APPEND_SLASH設置為True,也就是任何不匹配或尾部沒有斜杠(/)的申請URL,將被重定向至尾部包含斜杠的相同字眼的URL。

當 seetings.py 設置為 APPEND_SLASH = False 時,訪問 http://example.com/hello 將會返回 404。

所以我覺得還是按照官方默認開啟這個參數方便些,如果不想要后面的 / ,可以在 urls.py 定義成 '^hello$' 這樣的形式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM