Django Restful Framework 基础 Api (一)
Request Responses
建议配合官方文档阅读
request response
Request 解析
REST framwork 的 Request 对象提供了灵活的请求解析,允许 JSON data 或者其他 media 类型像处理表单数据一样去处理请求,代码可读性大大提高
.data
request.data 返回请求主题的解析内容。这跟 Django 的 request.POST 和 request.FILES 类似,并且还具有以下特点:
- 包括解析的内容,文件和非文件
- 支持解析 POST 以外的 HTTP method,比如 PUT
- 前端提交的不论是表单数据,还是 JSON 数据,request.data 都能够正确解析
.query_params
与 Django 中的 request.GET 相比,request.query_params 显然使得代码可读性提高,毫无疑问,此参数对应于任何 HTTP method 的查询参数
.parsers
APIView 类或者 @api_view 装饰器将根据视图上设置的 parser_classes 或 settings 文件中的 DEFAULT_PARSER_CLASSES 设置来确保此属性(.parsers)自动设置为 Parser 实例列表。
通常不需要关注此属性
.accepted_renderer | .accepted_media_type
request 允许使用者确定内容协商阶段的结果,这有利于我们实现为不同媒体类型选择不同的序列化方案
.accepted_renderer 是内容协商阶段选择的渲染器实例
.accepted_media_type 表示内容协商阶段接收的 media type 字符串
.user
request.user 通常会返回 django.contrib.auth.models.User 的一个实例,但其行为取决于正在使用的身份验证策略 如果请求未经身份验证,则 _request.user_` 的默认值是一个匿名用户
.auth
request.auth 返回任何附加的认证上下文,通常是请求经过身份验证的令牌(token)实例
如果请求未经身份验证,或者没有附加上下文(context),则 request.auth 的默认值为 None。
.method
返回 HTTP 方法的大写字符串形式,不作详解
.content_type
request.content_type 返回表示 HTTP 请求正文的媒体类型(media type)的字符串对象(比如: text/plain , text/html 等),如果没有提供媒体类型,则返回空字符串。
.stream
request.stream 返回一个代表请求主体内容的流
else
由于 REST framework 的 Request 扩展于 Django 的 HttpRequest,所有其他标准属性和方法也可用。例如 request.META 和 request.session 字典都可以正常使用。
Response 解析
REST framework 通过提供一个 Response 类来支持 HTTP 内容协商,该类允许开发者根据客户端请求返回不同的表现形式(如: JSON ,HTML 等)
Response 对象需要使用数据进行实例化,数据应由 Python 对象组成。然后 REST framework 使用标准的 HTTP 内容协商来确定它应该如何渲染最终响应的内容
使用 Response 类使得交互方式更良好,代码优化
Response()实例化函数
Django 中的 HttpResponse 对象需要传递渲染的内容进行实例化,而给 Response 则应该传递未渲染的数据,可以包括任何 Python 对象
由于 Response 类使用的渲染器不能处理复杂的数据类型(比如 Django 的模型实例),所以需要在创建 Response 对象之前将数据序列化为基本的数据类型,往后再更新有关 Serializer 类的内容
构造方法: Response(data, status=None, template_name=None, headers=None, content_type=None)
参数:
- data:响应的序列化数据
- status:相应的状态码,默认 200
- template_name: 选择 HTMLRenderer 时使用的模板名称
- headers: 设置 HTTP header,需为字典类型
- content_type: 响应的内容类型,通常渲染器会根据内容协商的结果自动设置
Response 属性
.data
还没有渲染,但已经序列化的响应数据
.status_code
状态码
.content
将会返回的响应内容,注意:必须先调用 .render() 方法,才能访问 .content
.template_name
只有在 response 的渲染器是 HTMLRenderer 或其他自定义模板渲染器时才需要提供
.accepted_renderer
用于将会返回的响应内容的渲染器实例,从视图返回响应之前由 APIView 或 @api_view 自动设置。
.accepted_media_type
内容协商阶段选择的媒体类型,从视图返回响应之前由 APIView 或 @api_view 自动设置
.renderer_context
将传递给渲染器的 .render() 方法的附加的上下文信息字典,从视图返回响应之前由 APIView 或 @api_view 自动设置
else
由于 REST framework 的 Request 扩展于 Django 的 HttpResponse,也可调用继承的 .render() 方法
调用此方法将响应的序列化数据呈现为最终响应内容
响应内容将设置为在 acceptedrenderer 实例上调用 .render(data,acceptedmedia_type,renderer_context) 方法的结果
结语
以上为 Request 与 Response 的基本内容,建议配合官方文档一起看
看完有帮助的可以打赏一下 oh 亲~