1. 程式人生 > >DRF 框架總結 - 檢視(Request 與 Response)

DRF 框架總結 - 檢視(Request 與 Response)

Request 與 Response

Request

REST framework 傳入檢視的 request 物件不再是 Django 預設的 HttpRequest 物件,而是 REST framework 提供的擴充套件了 HttpRequest 類的 Request 類的物件。

REST framework 提供了 Parser 解析器,在接收到請求後會自動根據 Content-Type 指明的請求資料型別(如JSON、表單等)將請求資料進行 parse 解析,解析為類字典物件儲存到 Request 物件中。

Request物件的資料是自動根據前端傳送資料的格式進行解析之後的結果。

無論前端傳送的哪種格式的資料,我們都可以以統一的方式讀取資料。


常用屬性
1) .data

request.data 返回解析之後的請求體資料。類似於Django中標準的request.POSTrequest.FILES屬性,但提供如下特性:

  • 包含了解析之後的檔案和非檔案資料
  • 包含了對 POST、 PUT、 PATCH 請求方式解析後的資料
  • 利用了 REST framework 的 parsers 解析器,不僅支援表單型別資料,也支援 JSON 資料
2).query_params

request.query_params與Django標準的request.GET

相同,只是更換了更正確的名稱而已。




Response

rest_framework.response.Response

REST framework提供了一個響應類Response,使用該類構造響應物件時,響應的具體資料內容會被轉換(render 渲染)成符合前端需求的型別。

REST framework提供了Renderer 渲染器,用來根據請求頭中的 Accept (接收資料型別宣告)來自動轉換響應資料到對應格式。如果前端請求中未進行 Accept 宣告,則會採用預設方式處理響應資料,我們可以通過配置來修改預設響應格式。

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES'
: ( # 預設響應渲染類 'rest_framework.renderers.JSONRenderer', # json渲染器 'rest_framework.renderers.BrowsableAPIRenderer', # 瀏覽API渲染器 ) }

構造方式
Response(data, status=None, template_name=None, headers=None, content_type=None)

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).data

傳給response物件的序列化後,但尚未render處理的資料

2).status_code

狀態碼的數字

3).content

經過render處理後的響應資料


狀態碼

為了方便配置狀態碼,RESTframework在 rest_framework.status 模組中提供了常用轉替狀態碼常量。

  • 資訊告知——1xx
  • 成功——2xx
  • 重定向——3xx
  • 客戶端錯誤——4xx
  • 伺服器錯誤——5xx