Request请求对象:
REST framework 引入了一个扩展HttpRequest的请求对象,提供了更灵活的请求解析。
.data
Request对象的核心功能是request.data属性,类似于request.POST,但是对于Web APIs更实用
request.POST # 仅可处理表单数据,仅仅用于post请求.
request.data # 处理任意数据, 可供 'POST', 'PUT' and 'PATCH' 请求使用。
request.data 返回请求主题的解析内容。这跟标准的 request.POST 和 request.FILES 类似,并且还具有以下特点:
- 包括所有解析的内容,文件(file) 和 非文件(non-file inputs)。
- 支持解析 POST 以外的 HTTP method , 比如 PUT, PATCH。
- 更加灵活,不仅仅支持表单数据,传入同样的 JSON 数据一样可以正确解析,并且不用做额外的处理(意思是前端不管提交的是表单数据,还是 JSON 数据,.data 都能够正确解析)
request.query_params
等同于 request.GET
,不过其名字更加容易理解。
为了代码更加清晰可读,推荐使用 request.query_params
,而不是 Django 中的 request.GET
,这样那够让你的代码更加明显的体现出 ----- 任何 HTTP method 类型都可能包含查询参数(query parameters),而不仅仅只是 'GET' 请求。
.parser
APIView
类或者 @api_view
装饰器将根据视图上设置的 parser_classes
或 settings
文件中的 DEFAULT_PARSER_CLASSES
设置来确保此属性(.parsers
)自动设置为 Parser
实例列表。
通常不需要关注该属性......
Response响应对象:
REST framework 也引入了一个response对象,它是一种TemplateResponse类型,它渲染文本内容,并根据内容决定返回给客户端的数据类型。
与普通 HttpResponse 对象不同,您不会使用渲染的内容实例化 Response 对象。相反,您传递的是未渲染的数据,可能包含任何 Python 对象。
由于 Response 类使用的渲染器不能处理复杂的数据类型(比如 Django 的模型实例),所以需要在创建 Response 对象之前将数据序列化为基本的数据类型。
你可以使用 REST framework 的 Serializer 类来执行序列化的操作,也可以用自己的方式来序列化。
构造方法: Response(data, status=None, template_name=None, headers=None, content_type=None)
return Response(data) # 通过客户端请求返回渲染的内容
参数:
data: 响应的序列化数据。
status: 响应的状态代码。默认为200。
template_name: 选择 HTMLRenderer 时使用的模板名称。
headers: 设置 HTTP header,字典类型。
content_type: 响应的内容类型,通常渲染器会根据内容协商的结果自动设置,但有些时候需要手动指定。
Status Code 状态码:
在你的视图中使用数字http 状态码不利于阅读,它很容易让你不会注意到代码的错误,
REST framework为每个状态码提供了更加明确的标示,例如HTTP_400_BAD_REQUEST在status模块中,
使用这个来代替数字是一个不错的方法
装饰API视图:
REST framework提供了两种封装器,你可以使用他们写views
- @api_view装饰器用在基于视图的方法上;
- APIView 装饰器用在类view中;
这些装饰器提供一些功能,例如确保在你的视图中接收Request对象,例如在你的Response对象中添加上下文,
这样我们就能实现内容通信。 这里装饰器也提供了一些行为,例如在合适的时候返回405 Method Not Allowed响应,
例如处理任何在访问错误输入的request.data时出现的解析错误(ParseError)异常。
网友评论