drf--請求和響應
一 請求與響應
1.1 Request
REST framework 傳入檢視的request物件不再是Django預設的HttpRequest物件,而是REST framework提供的擴充套件了HttpRequest類的Request類的物件。
REST framework 提供了Parser解析器,在接收到請求後會自動根據Content-Type指明的請求資料型別(如JSON、表單等)將請求資料進行parse解析,解析為類字典[QueryDict]物件儲存到Request物件中。
Request物件的資料是自動根據前端傳送資料的格式進行解析之後的結果。
無論前端傳送的哪種格式的資料,我們都可以以統一的方式讀取資料。
1.1.1.1 常用屬性
1).data
request.data
返回解析之後的請求體資料。類似於Django中標準的request.POST
和 request.FILES
屬性,但提供如下特性:
- 包含了解析之後的檔案和非檔案資料
- 包含了對POST、PUT、PATCH請求方式解析後的資料
- 利用了REST framework的parsers解析器,不僅支援表單型別資料,也支援JSON資料
2).query_params
request.query_params
與Django標準的request.GET
相同,只是更換了更正確的名稱而已。
1.2 Response
|
|
REST framework提供了一個響應類Response
,使用該類構造響應物件時,響應的具體資料內容會被轉換(render渲染)成符合前端需求的型別。
REST framework提供了Renderer
渲染器,用來根據請求頭中的Accept
(接收資料型別宣告)來自動轉換響應資料到對應格式。如果前端請求中未進行Accept宣告,則會採用預設方式處理響應資料,我們可以通過配置來修改預設響應格式。
可以在rest_framework.settings查詢所有的drf預設配置項
|
|
1.1.2.1 構造方式
|
|
data
資料不要是render處理之後的資料,只需傳遞python的內建型別資料即可,REST framework會使用renderer
渲染器處理data
。
data
不能是複雜結構的資料,如Django的模型類物件,對於這樣的資料我們可以使用Serializer
序列化器序列化處理後(轉為了Python字典型別)再傳遞給data
引數。
引數說明:
data
: 為響應準備的序列化處理後的資料;status
: 狀態碼,預設200;template_name
: 模板名稱,如果使用HTMLRenderer
時需指明;headers
: 用於存放響應頭資訊的字典;content_type
: 響應資料的Content-Type,通常此引數無需傳遞,REST framework會根據前端所需型別資料來設定該引數。
1.1.2.2 常用屬性
1).data
傳給response物件的序列化後,但尚未render處理的資料
2).status_code
狀態碼的數字
3).content
經過render處理後的響應資料
1.1.2.3 狀態碼
為了方便設定狀態碼,REST framewrok在rest_framework.status
模組中提供了常用狀態碼常量。
1)資訊告知 - 1xx
|
|
2)成功 - 2xx
|
|
3)重定向 - 3xx
|
|
4)客戶端錯誤 - 4xx
|
|
5)伺服器錯誤 - 5xx
|
|