一 請求與響應
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
|
|