Responses
REST框架通过提供一个响应类来支持HTTP内容协商,该响应类允许您根据客户端请求将可呈现的内容渲染成多种内容类型。
Response类是Django的SimpleTemplateResponse的子类。响应对象使用data进行初始化,数据应包含本机Python原语。然后,REST框架使用标准HTTP content negotiation来确定如何呈现最终响应内容。
您不需要使用Response类,如果需要,还可以从视图中返回常规的HttpResponse或StreamingHttpResponse对象。使用Response类只需提供一个更好的界面来返回 content-negotiated Web API响应,可以渲染为多种格式。
除非您想要大量定制REST框架,否则您应该始终为返回Response对象的视图使用APIView类或@api_view函数。这样做可以确保视图在从视图返回之前可以执行content negotiation并为响应选择适当的渲染器。
Creating responses
Response()
签名:响应(data,status = None,template_name = None,headers = None,content_type = None)
与常规HttpResponse对象不同,您不会将呈现内容的Response对象实例化。 而是传递未提交的数据,这些数据可能由任何Python基元组成。
Response类使用的渲染器无法本地处理诸如Django模型实例之类的复杂数据类型,因此您需要在创建Response对象之前将数据序列化为原始数据类型。
您可以使用REST框架的Serializer类来执行此数据序列化,或使用您自己的自定义序列化。
参数:
- data: 响应的序列化数据。
- status: 响应的状态码。默认为200.可查看响应码
- template_name: 选择HTMLRenderer时要使用的模板名称。
- headers: 用于响应的HTTP头字典。
- content_type: 响应的内容类型。 通常,这将由渲染器自动设置,由content negotiation确定,但可能会出现某些情况,您需要明确指定内容类型。
Attributes
.data
Request对象的未呈现的内容。
.status_code
HTTP响应的数字状态代码。
.content
呈现内容的响应。 必须先调用.render()方法才能访问.content。
.template_name
template_name,如果提供。 仅当HTMLRenderer或其他自定义模板渲染器是响应的可用渲染器时才需要。
.accepted_renderer
用于渲染响应的渲染器实例。在视图返回响应之前,由APIView或@api_view自动设置。
.accepted_media_type
由content negotiation stage选择的媒体类型。由APIView自动设置或者在视图中返回响应之前的@api_view。
.renderer_context
将传递给渲染器的.render()方法的附加上下文信息的字典。由APIView自动设置或者在视图中返回响应之前的@api_view。
Standard HttpResponse attributes
Response类扩展了SimpleTemplateResponse,所有常见的属性和方法也可用于响应。 例如,您可以以标准方式在响应中设置头文件:
response = Response()
response['Cache-Control'] = 'no-cache'
.render()
Signature: .render()
与任何其他TemplateResponse一样,调用此方法将响应的序列化数据呈现到最终响应内容中。 当.render()被调用时,响应内容将被设置为在accepted_renderer实例上调用.render(data,accepted_media_type,renderer_context)方法的结果。你通常不需要自己调用.render() 它由Django的标准响应周期处理。