drf 的 Request 与 Response

Request

如果你正在做基于 REST 的web 服务,那么请忽略 request.POST。
---- Malcom Tredinnick, Django 开发组人员

REST 框架的请求类扩展了 HttpRequest,增加了 REST 框架的灵活请求解析和请求认证的支持。

Request parsing

REST 框架的请求对象提供了灵活的请求解析,允许您以与通常处理表单数据相同的方式处理带有 JSON 数据或其他媒体类型的请求。

.data

request.data 返回请求主体解析后的内容。它支持多种解析格式。具体看文档。

.query_params

主要是 GET 请求的参数
Request 并不是继承了 Django 的 HttpRequest,而是使用组合扩展类。
drf request 实现了 getattr() 方法:

def __getattr__(self, attr):
    try:
        return getattr(self._request, attr)
    except AttributeError:
        return self.__getattribute__(attr)

Response

与基本的 HttpResponse 不同,TemplateResponse 对象保留了试图提供了用于计算响应的上下文的详细讯息,知道需要时才会计算出最终的响应输出,稍后再响应过程中进行计算。

  • Django文档

这个 Response 类是 Django 的子类SimpleTemplateResponse。Response对象使用数据进行初始化,数据应由本地Python基元组成。REST框架然后使用标准的HTTP内容协商来确定它应该如何呈现最终响应内容。
你不一定要使用 Response 该类,如果需要,还可以从视图中返回常规 HttpResponseStreamingHttpResponse 对象。使用 Response该类只是提供了一个更好的界面,用于返回经过内容协商的 Web API 响应,可以呈现为多种格式。

创建一个 Response

Response
  • 用法:Response(data, status=None, template_name=None, headers=None, content_type=None)
    Response该类使用的渲染器不能本地处理复杂的数据类型,例如 Django 模型实例,因此您需要在创建 Response 对象之前将数据序列化为基本数据类型。
    您可以使用 REST 框架的 Serializer 类来执行此数据序列化,或者使用您自己的自定义序列化。
    这个 Response 类扩展了SimpleTemplateResponse,所有通常的属性和方法也可以在响应中获得。例如,您可以用标准方式在响应中设置标题:
response = Response()
response['Cache-Control'] = 'no-cache'

你可能感兴趣的:(drf 的 Request 与 Response)