Requests
使用 REST framework 时应该避免使用 Django 提供的request.Get
或者request.POST
API,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
方法即可。
评论区