Responsesgit
與基本的 HttpResponse 對象不一樣,TemplateResponse 對象保留了視圖提供的用於計算響應的上下文的詳細信息。直到須要時纔會計算最終的響應輸出,也就是在後面的響應過程當中進行計算。 — Django 文檔github
REST framework 經過提供一個 Response
類來支持 HTTP 內容協商,該類容許你根據客戶端請求返回不一樣的表現形式(如: JSON ,HTML 等)。django
Response
類的子類是 Django 的 SimpleTemplateResponse
。Response
對象使用數據進行初始化,數據應由 Python 對象(native Python primitives)組成。而後 REST framework 使用標準的 HTTP 內容協商來肯定它應該如何渲染最終響應的內容。api
固然,您也能夠不使用 Response
類,直接返回常規 HttpResponse
或 StreamingHttpResponse
對象。 使用 Response
類只是提供了一個更好的交互方式,它能夠返回多種格式。ide
除非因爲某種緣由須要大幅度定製 REST framework ,不然應該始終對返回 Response
對象的視圖使用 APIView
類或 @api_view
裝飾器。這樣作能夠確保視圖執行內容協商,並在視圖返回以前爲響應選擇適當的渲染器。ui
與普通 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
: 響應的內容類型,一般渲染器會根據內容協商的結果自動設置,但有些時候須要手動指定。尚未渲染,但已經序列化的響應數據。
狀態碼
將會返回的響應內容,必須先調用 .render()
方法,才能訪問 .content
。
只有在 response 的渲染器是 HTMLRenderer
或其餘自定義模板渲染器時才須要提供。
用於將會返回的響應內容的渲染器實例。
從視圖返回響應以前由 APIView
或 @api_view
自動設置。
內容協商階段選擇的媒體類型。
從視圖返回響應以前由 APIView
或 @api_view
自動設置。
.renderer_context
將傳遞給渲染器的 .render()
方法的附加的上下文信息字典。
從視圖返回響應以前由 APIView
或 @api_view
自動設置。
Response
類擴展於 SimpleTemplateResponse
,而且響應中也提供了全部經常使用的屬性和方法。例如,您能夠用標準方式在響應中設置 header:
response = Response() response['Cache-Control'] = 'no-cache'
.render()
與其餘任何 TemplateResponse
同樣,調用此方法將響應的序列化數據呈現爲最終響應內容。響應內容將設置爲在 accepted_renderer
實例上調用 .render(data,accepted_media_type,renderer_context)
方法的結果。
一般不須要本身調用 .render()
,由於它是由 Django 處理的。