【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的标准响应循环处理的。
posted @ 2022-04-25 15:53  郭祺迦  阅读(246)  评论(0)    收藏  举报