DRF的Response

Responsesgit

與基本的 HttpResponse 對象不一樣,TemplateResponse 對象保留了視圖提供的用於計算響應的上下文的詳細信息。直到須要時纔會計算最終的響應輸出,也就是在後面的響應過程當中進行計算。 — Django 文檔github

REST framework 經過提供一個 Response 類來支持 HTTP 內容協商,該類容許你根據客戶端請求返回不一樣的表現形式(如: JSON ,HTML 等)。django

Response 類的子類是 Django 的 SimpleTemplateResponseResponse 對象使用數據進行初始化,數據應由 Python 對象(native Python primitives)組成。而後 REST framework 使用標準的 HTTP 內容協商來肯定它應該如何渲染最終響應的內容。api

固然,您也能夠不使用 Response 類,直接返回常規 HttpResponse 或 StreamingHttpResponse 對象。 使用 Response 類只是提供了一個更好的交互方式,它能夠返回多種格式。ide

除非因爲某種緣由須要大幅度定製 REST framework ,不然應該始終對返回 Response 對象的視圖使用 APIView 類或 @api_view 裝飾器。這樣作能夠確保視圖執行內容協商,並在視圖返回以前爲響應選擇適當的渲染器。ui

建立 responserest

Response()code

與普通 HttpResponse 對象不一樣,您不會使用渲染的內容實例化 Response 對象。相反,您傳遞的是未渲染的數據,可能包含任何 Python 對象。對象

因爲 Response 類使用的渲染器不能處理複雜的數據類型(好比 Django 的模型實例),因此須要在建立 Response 對象以前將數據序列化爲基本的數據類型。blog

你可使用 REST framework 的 Serializer 類來執行序列化的操做,也能夠用本身的方式來序列化。

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

參數:

  • data: 響應的序列化數據。
  • status: 響應的狀態代碼。默認爲200。
  • template_name: 選擇 HTMLRenderer 時使用的模板名稱。
  • headers: 設置 HTTP header,字典類型。
  • content_type: 響應的內容類型,一般渲染器會根據內容協商的結果自動設置,但有些時候須要手動指定。

屬性

.data

尚未渲染,但已經序列化的響應數據。

.status_code

狀態碼

.content

將會返回的響應內容,必須先調用 .render() 方法,才能訪問 .content 。

.template_name

只有在 response 的渲染器是 HTMLRenderer 或其餘自定義模板渲染器時才須要提供。

.accepted_renderer

用於將會返回的響應內容的渲染器實例。

從視圖返回響應以前由 APIView 或 @api_view 自動設置。

.accepted_media_type

內容協商階段選擇的媒體類型。

從視圖返回響應以前由 APIView 或 @api_view 自動設置。

.renderer_context

將傳遞給渲染器的 .render() 方法的附加的上下文信息字典。

從視圖返回響應以前由 APIView 或 @api_view 自動設置。

標準 HttpResponse 屬性

Response 類擴展於 SimpleTemplateResponse,而且響應中也提供了全部經常使用的屬性和方法。例如,您能夠用標準方式在響應中設置 header:

response = Response()
response['Cache-Control'] = 'no-cache'
 

.render()

與其餘任何 TemplateResponse 同樣,調用此方法將響應的序列化數據呈現爲最終響應內容。響應內容將設置爲在 accepted_renderer 實例上調用 .render(data,accepted_media_type,renderer_context) 方法的結果。

一般不須要本身調用 .render() ,由於它是由 Django 處理的。

相關文章
相關標籤/搜索