侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

DRF - 请求和响应对象

barwe
2022-10-07 / 0 评论 / 0 点赞 / 637 阅读 / 1,139 字
温馨提示:
本文最后更新于 2023-06-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Requests

使用 REST framework 时应该避免使用 Django 提供的request.Get或者request.POSTAPI,REST framework 提供了专门的 API 来访问请求中的数据。

REST framework 的Request类扩展了 Django 的HttpRequest类,实现了灵活的请求解析和请求鉴权。(是扩展,不是继承)

请求解析

REST framework 的Request对象允许你将请求数据解析为 JSON 格式或者其它格式(ps: 但是一般都会 JSON 吧)。

.data

request.data获取请求体的解析结果,类似于 Django 标准的.POST或者.FILES属性,差异在于:

  • REST framework 将文件(FILES)和非文件(POST)数据都解析到了 data 中
  • 还会解析除了 POST 请求外的其它方法(例如 PUT 和 PATCH)的请求体中的数据(GET 没有请求体)。
  • 可以灵活处理请求中的 JSON 数据和表单数据,它们都被自动解析到了 data 中

.query_params

使用 REST framework 提供的request.query_params而不是默认的.GET来获取查询参数。

因为所有 HTTP 方法都可以携带查询参数,而.GET总感觉是为 GET 方法设计的,REST framework 消除了这一字面上的歧义。

.parsers

暂时略,看不太懂。

内容协商

暂时略,看不太懂。

请求鉴权

REST framework 提供了对单个请求的权限鉴定:

  • 对不同 API 使用不同的鉴权策略
  • 对同一个 API 使用多个鉴权策略
  • 对请求同时进行 user 和 token 的鉴定

.user

请求附带的用户信息,如果为请求设置了用户访问策略,request.user是一个django.contrib.auth.models.User实例。

否则意味着所有用户都可发起该请求,request.user是一个django.contrib.auth.models.AnonymouseUser实例。

.auth

request.auth用来获取额外的鉴权内容,这与设置的鉴权策略有关系,例如获取一个 token 对象。

如果没有为请求设置鉴权策略,request.auth返回None

Responses

与基础的HttpRequest对象不一样的是,TemplateResponse对象会留存生成这个对象的视图的上下文。

并且这种响应的结果计算不是实时的,而是惰性的:只有在需要的时候才计算。

REST framework 支持在视图函数中直接返回一个Response对象,以此来定制个性化的响应(内容协商)。

Response类用深度定制处理请求的方式,一般我们不这样干。

我们只需要使用APIView类或者@api_view方法即可。

0

评论区