Responses

与基本的HttpResponse对象不同,TemplateResponse对象保留了由视图提供的上下文来计算响应的细节。响应的最终输出直到在响应过程中需要时才计算。 ——Django documentation

REST framework提供了Response类来支持内容解析,它允许你根据客户端的请求将数据渲染成多种类型。

Response类是DjangoSimpleTemplateResponse类的子类。使用数据初始化Response时,数据应包含原生Python函数。REST framework使用标准HTTP内容解析去决定应该如何返回最终的响应内容。

你不需要使用Response类,如果有需要,你也可以从视图中返回常规的HttpResponse或者StreamingHttpResponse对象。使用Response只是提供了一个更好的界面,它可以以多种形式来展示Web API接口的响应内容。

除非你由于某种原因需要大量自定义Rest framework,否则应始终对返回Response对象的视图使用APIView类或@api_view函数。这样可以确保视图在从视图返回之前可以执行内容解析并为response选择合适的渲染器。


Creating responses

Response()

Signature:Response(data,status=None,template_name=None,headers=None,content_type=None)

与常规的HttpResponse对象不同,你不必将已渲染内容的Response对象实例化。相反,你可以传递任何未渲染的数据,这些数据可能由任何Python原语组成。

Response类使用的渲染器不能本机处理复杂的数据类型,例如Django模型实例,因此在创建Response对象之前,需要将数据序列化为原始数据类型。

你可以使用REST framework的Serializer类去执行数据的序列化,或者使用自定义的序列化器。

参数说明:

  • data:response要序列化的数据。
  • status: response的状态码。默认是200
  • template_name:选择使用的HTMLRender的模板的名字。
  • headers:response中使用的HTTP头部字典。
  • content_type:response的内容类型。通常,这将由内容解析的渲染器自动设置,但是可能有一些情况需要显式的指定内容类型。

Attributes

.data

请求对象未渲染的内容。

.content

response中已渲染的内容。必须调用.render()方法才可以访问.content的内容。

.template_name

只有当HTMLRender或其他自定义渲染器是是response允许接受的渲染器时才需要提供template_name

.accepted_render

将被用于渲染response的渲染器的实例。 在response从view返回之前由APIView@api_view自动设置。

.render_context

将上下文信息的字典附加到渲染器的.render()方法上。 在response从view返回之前由APIView@api_view自动设置。


Standard HttpResponse attributes

Response类继承了SimpleTemplateResponse,所以SimpleTemplateResponse中所有的属性和方法在Response里都可以使用。例如,你可以以标准的方式来设置response的头部:

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

.render()

Signature: .render()

与任何其他TemplateResponse一样,调用此方法将response的序列化数据渲染为最终内容。 当调用.render()时,响应内容将被设置为在accepted_renderer实例上调用.render(data,accepted_media_type,renderer_context)方法的结果。

results matching ""

    No results matching ""