API Guide(二)之Responses
Responses
與基本的HttpResponse對象不同,TemplateResponse對象保留 the details of the context that was provided by the view to compute the response。The final output of the response is not computed until it is needed, later in the response process.
- Django文檔
REST框架通過提供一個Response
類來支持HTTP content negotiation,該類允許您根據客戶端請求返回可以被渲染成多種內容類型的內容。
The Response
class subclasses Django‘s SimpleTemplateResponse
。Response
objects are initialised with data, which should consist of native Python primitives.然後,REST框架使用標準HTTP內容協商來確定如何渲染最終響應內容。
您不需要使用Response
該類,如果需要,還可以從視圖中返回常規的HttpResponse
或StreamingHttpResponse
對象。使用Response
該類只需提供一個更好的界面來返回內容協商的Web API響應,這個界面可以渲染為多種格式。
除非您想要大量自定義REST框架,否則您應該始終為返回Response
對象的視圖使用APIView
類或@api_view
函數。這樣做可以確保在從視圖返回之前可以執行 content negotiation並為響應選擇適當的渲染器。
Creating responses
Response()
簽名: Response(data, status=None, template_name=None, headers=None, content_type=None)
與常規HttpResponse
對象不同,您不會用 rendered content 實例化 Response
對象。而是傳遞 unrendered data,這些數據可能由任何Python primitives 組成。
Response
類使用的renderers 不能本地處理諸如Django模型實例等復雜的數據類型,因此您需要在創建Response
對象之前將數據序列化為原始數據類型。
您可以使用REST框架的Serializer
類來執行此數據序列化,或使用您自定義的serialization。
參數:
data
:響應的序列化數據。status
:響應的狀態碼。默認為200.另請參見狀態碼。template_name
:HTMLRenderer
選擇使用的模板名稱。headers
:用於響應的HTTP標頭字典。content_type
:響應的內容類型。通常,這將由content negotiation確定由renderer 自動設置,但在某些情況下,需要你明確指定內容類型。
Attributes
.data
Request
對象的未渲染內容。
.status_code
HTTP響應的數字形式的狀態碼。
.content
The rendered content of the response。.render()
方法必須在.content
被訪問之前被調用。
.template_name
The template_name
, if supplied. Only required if HTMLRenderer
or some other custom template renderer is the accepted renderer for the response.
.accepted_renderer
將用於渲染響應的渲染器實例。
從視圖返回響應之前,由APIView
或@api_view
自動設置。
.accepted_media_type
由the content negotiation stage 選擇的媒體類型。
從視圖返回響應之前,由APIView
或@api_view
自動設置。
.renderer_context
將傳遞給渲染器.render()
方法的附加上下文信息的字典。
從視圖返回響應之前,由APIView
或@api_view
自動設置。
標準的HttpResponse屬性
The Response
class extends SimpleTemplateResponse
, and all the usual attributes and methods are also available on the response. For example you can set headers on the response in the standard way:
response = Response() response[‘Cache-Control‘] = ‘no-cache‘
.render()
簽名: .render()
As with any other TemplateResponse
, this method is called to render the serialized data of the response into the final response content. When .render()
is called, the response content will be set to the result of calling the .render(data, accepted_media_type, renderer_context)
method on the accepted_renderer
instance.
通常您不需要調用.render()
自己,因為它是由Django的標準響應周期處理的。
API Guide(二)之Responses