1. 程式人生 > >API Guide(二)之Responses

API Guide(二)之Responses

als 框架 內容類型 table 序列 subclass end render 響應

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 SimpleTemplateResponseResponse objects are initialised with data, which should consist of native Python primitives.然後,REST框架使用標準HTTP內容協商來確定如何渲染最終響應內容。

您不需要使用Response該類,如果需要,還可以從視圖中返回常規的HttpResponseStreamingHttpResponse對象。使用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_nameHTMLRenderer選擇使用的模板名稱。
  • 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