【djangorestframework】2、Responses(响应)
作者:互联网
响应(Responses)
- 与基本的HttpResponse对象不同,TemplateResponse对象保留了视图提供的用于计算响应的上下文的详细信息。在响应过程中,直到需要时才会计算最终的响应输出。----Django文档
- REST framework通过提供一个Response类来支持HTTP内容协商,该类允许你根据客户端请求返回可渲染为多种内容类型的内容。
- Response类的子类是Django的SimpleTemplateResponse。响应对象使用数据进行初始化,数据应由本地Python基元组成。REST framework然后使用标准的HTTP内容协商来确定它如何渲染最终响应内容。
- 你不需要使用Response类,如果需要,也可以从视图中返回常规的HttpResponse或StreamingHttpRespnse对象。使用Response类只是为返回内容协商的Web API响应提供更好的接口,这些响应可以渲染为多种格式。
- 除非出于某种原因需要大量定制REST framework,否则应始终对返回Response对象的视图使用APIView类或@api_view函数。这样做可以确保视图执行内容协商,并在视图返回之前为响应选择适当的渲染器。
创建response
- Response()
- 语法:Response(data, status=None, template_name=None, headers=None, content_type=None)
- 与常规HttpResponse对象不同,你不会使用渲染的内容实例化Response对象,相反,你传递的是未渲染的数据,可能由任何Python基元组成
- 由于Response类使用的渲染器不能处理复杂的数据类型,例如Django模型实例,所以需要在创建Response对象之前将数据序列化为基础数据类型
- 你可以使用REST framework的Serializer类来执行数据序列化,或者使用你自己的自定义序列化。
- 参数:
- data:响应的序列化数据
- status:响应的状态代码。默认为200.
- template_name:选择HTMLRenderer时使用的模板名称
- headers:响应中使用的HTTP Headers的字典
- content_type:响应的内容类型。通常情况下,渲染器会根据内容协商的结果自动设置,但有些情况下需要明确指定内容类型。
属性(Attributes)
- .data
- 未渲染的、序列化的响应数据
- .status_code
- HTTP响应的数字状态码
- .content
- 响应的渲染内容。在访问.content之前,必须先调用.render()方法
- .template_name
- template_name(如果提供)。只有当HTMLRenderer或其他自定义模板渲染器是响应的渲染器时才需要
- .accepted_renderer
- 用于渲染响应的渲染器实例
- 从视图返回响应之前由APIView或@api_view自动设置
- .renderer_context
- 将传递给渲染器的.render()方法的附加的上下文信息的字典
- 从视图返回响应之前由APIView或@api_view自动设置。
标准HttpResponse属性
- Response类扩展了SimpleTemplateResponse,并且响应中也提供了所有常用的属性和方法。例如,你可以用标准方式在响应中设置headers:
response = Response()
response['Cache-Control'] = 'no-cache'
- .render()
- 语法:.render()
- 与其他任何TemplateResponse一样,调用此方法将响应的序列化数据渲染为最终响应内容。调用.render()时,响应内容将设置为accepted_renderer实例上调用.render(data, accepted_media_type, renderer_context)方法的结果。
- 通常不需要自己调用.render(),因为它是由Django的标准响应循环处理的。
标签:渲染器,Responses,render,渲染,视图,响应,djangorestframework,Response 来源: https://www.cnblogs.com/guojie-guojie/p/16190577.html