Django如何解析前端傳遞的請求參數


一、在Django函數視圖中,request是一個必傳參數,那么request參數到底是什么?

首先使用print函數打印一下request,可以看到request是一個WSGIRequest對象,然后使用__mro__來查看其繼承關系,發現request實際上是HttpRequest對象

打斷點調試,查看request對象中包含了哪些數據,可以看到request中包含了請求的所有信息

二、前端傳遞不同參數,如何從request對象中獲取?

首先,需要清楚前端傳遞參數的類型有哪些:路徑參數、查詢字符串參數、請求體參數(json、www-form-urlencoded、form-data、binary)、請求頭參數

1、路徑參數

  1)url路徑中傳遞的參數,如:projects/2/ 中的2即為路徑參數

  2)在函數視圖中通過同名位置參數來接收即可,如:pk

2、查詢字符串參數

  1) url路徑中?后面的key=value參數,如:projects/?name=xx&leader=ppd  中的name和leader即為查詢字符串參數

  2)使用request.GET獲取

值得注意的是:

1)request.GET返回的是QueryDict,類似python的Dict類型,但不是Dict,獲取QueryDict的value,可以使用request.GET["key"] 或 request.GET.get("key")

2)當查詢字符串參數的key有多個value時,如:projects/?name=xx&name=yy,使用request.GET["key"] 或 request.GET.get("key")獲取的是最后一個value值即“hh”,此時,可以使用request.GET.getlist("key")獲取name所有的value值組成的列表(注:dict是不支持getlist方法的)

3、請求體參數:

1)json:請求體中json格式的參數,一般是bytes類型,content-type 為 application/json

使用 request.body 獲取

注意:request.body返回的是bytes類型,需要使用json.loads()轉換為字典類型,即json.loads(request.body)

2)www-form-urlencoded:請求體中form表單參數,只能是key-value形式,一般是在前端頁面中使用表單錄入的參數,content-type為application/www-form-urlencoded

有兩種獲取表單參數的方式:1⃣️ request.POST,此種方式返回的是QueryDict  2⃣️ request.body,此種方式返回的是bytes類型

注意:一般情況下使用 request.POST 獲取表單參數,而不用 request.body 獲取

3)form-data:請求體中form-data參數,可以是key-value形式,也可以是二進制數據(視頻/文件/圖片),content-type 為 multipart/data

解析前端傳遞的form-data參數:1⃣️ 當傳遞的是純文本參數(key-value)時,使用 request.POST 獲取,返回的是QueryDict;2⃣️ 當傳遞的是二進制數據時,使用 request.FILES 獲取,返回的是文件流(可以打開衣櫃文件,將獲取的文件流寫入即可)

 

4)file(binary):請求體中傳遞的二進制數據(文件/視頻/圖片)

可以使用 request.body 獲取

4、請求頭參數:即在請求頭中傳遞的參數

獲取方式有兩種:1)使用request.headers["key"] 或 request.headers.get("key") 獲取

        2)使用request.META["轉化后的key"]

           轉化后的key = HTTP_ + key大寫(注意:如果key中含有-,則-會被轉化為_,所以請求頭參數中不能包含下划線,否則解析時會出錯)

注意:一般情況下使用第二種獲取方式

特別說明:META中存儲的是所有請求的元數據信息


免責聲明!

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



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