DRF框架--request对象和response对象

Django提供了HttpRequest对象,HttpResponse对象

DRF对HttpRequest和HttpResponse进行重新拓展封装,提供了request对象和response对象

request对象

REST framework传入视图的request对象不再是django默认的HttpRequest对象,而是REST framework提供的扩展了HttpResponse类的Request类的对象.

REST framework提供了Parser解析器,在接受到请求后自动根据Content-Type指明的请求数据类型(JSON,表单,bytes等)将请求数据进行parse解析,解析为类字典对象保存到Request对象中.

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果.

request.data 

返回解析之后的请求体数据,类似于Django中标准的request.Post和request.FILES属性,但同时有如下特性:

  • 包含了解析之后的文件和非文件数据
  • 包含了对POST,PUT,PATHCH请求方式解析后的数据
  • 利用了REST framework的parsers解析器,不仅支持表单类型数据(urlencoded,form-data),也支持JSON数据(application/json)

request.query_params

request.query_params与Django标准的request.GET相同,只是更换了更正确的名称而已

# http://127.0.0.1:8000/students/?a=1&b=1&b=3
request.query_params   #>> <QueryDict:{'a':['1'],'b':['2','3']}>
request.query_params.getlist('b')  #>> ['2','3']

# 使用Django中的request方法也可以得到同样的结果
request.GET.getlist('b')  #>> ['2','3']

response对象

Response

REST framework 提供了一个响应类Response,使用该类构造响应对象时,响应的具体数据内容会被转换(render渲染)成符合前端需求的类型

REST framework提供了Renderer渲染器,用来根据请求头中Accept(接收数据类型声明)来自动转换响应数据到对应格式,如果前端请求中未进行Accept申明,则会采用默认方式处理响应数据,我们可以通过配置来修改默认响应格式

Response构造方式

Response(data,status=None,template_name=None,headers=None,content_type=None)

data数据不要是render处理之后的数据,只需要传递python的内建类型数据即可,REST framework会使用renderer渲染器处理data

data不能是复杂结构的数据,如Django的模型类对象,对于这样的数据我们可以使用Serializer序列化器进行序列化处理后(转为了python字典类型)再传递给data参数

参数说明:

  • data: 为响应准备的序列化处理后的数据
  • status: 状态码,默认200
  • template_name: 模板名称,如果使用HTMLRender时需要指明
  • headers: 用于存放响应头信息的字典
  • content_type: 响应数据的Content-Type,通常此参数无需传递,REST framework会根据前端所需类型数据来设置该参数

Response常用属性:

1) .data

传给response对象的 序列化后但尚未render处理的数据

2) .status_code

状态码的数字

3) .content

经过render处理后的响应数据

 

posted @   EricYJChung  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示