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处理后的响应数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通