drf-Request与Response
2024-10-19 10:07:01
一、Request
在Rest Framework 传入视图的request对象已经不再是Django默认的HTTPResponse对象了,而是Rest Framework提供的Request类的对象了。
但是Request会在接受到请求后会自动根据Content-type
的数据类型进行解析为[QueryDict]对象,也就是说它会自动根据前端发送的数据格式进行解析。
源码分析
# from rest_framework.request import Request
def __init__(self, request, parsers=None, authenticators=None,
negotiator=None, parser_context=None):
# 先判断传入的request是不是原生的HttpResponse的对象,为了避免套娃
assert isinstance(request, HttpRequest), (
.format(request.__class__.__module__, request.__class__.__name__)
)
# 二次封装request,将原生request作为drf request对象的 _request 属性
self._request = request
# 点拦截,当新request.的时候触发
def __getattr__(self, attr):
try:
return getattr(self._request, attr) # 通过反射,获取原生request对象,取出属性或方法
except AttributeError:
return self.__getattribute__(attr)
常用属性
request.data:
返回解析后的请求体数据,不仅支持表单类型数据,也支持JSON数据
request.query_params:
和Django原生的request.GET
相同,名字不一样而已
@property
def query_params(self):
return self._request.GET # 还是原来那个
二、Response
这是Rest Framework提供的响应类,它会把数据内容转换成符合前端的数据类型,它是根据请求头中的Accept
来自动转换响应数据到对应格式。没有的话就是默认的,可以通过以下配置:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类
'rest_framework.renderers.JSONRenderer', # json渲染器
'rest_framework.renderers.BrowsableAPIRenderer', # 浏览API渲染器
)
}
参数说明
# from rest_framework.response import Response
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
data:
返回要被序列化的数据,字典
status:
状态码,默认200
template:
模板名称,可以自定义模版
headers:
响应头,可以往响应头放东西,就是一个字典
content_type:
响应的编码格式,(application/json或text/html)
常用属性
.data:
传给response对象序列化后没有render的数据
.status_code:
状态码
.content:
render后的响应数据
最新文章
- visual studio code + Nodejs + Typescritpt + angularjs2 + bootstrap 环境搭建/Elementary os
- [Angularjs]angular ng-repeat与js特效加载先后导致的问题
- 你可能不知道的SQL问题
- BZOJ 3563 DZY Loves Chinese
- JY02-HTML/CSS-京东01 定位是很粗暴的页面布局方法
- JSON字符串和JS对象
- (转)Java.lang.reflect.Method invoke方法 实例
- VB6文件操作自定义函数合集之一
- Spring 的IOC和AOP总结
- python连接mysql数据库读取数据
- JDK1.7 的 HashMap
- 可遇不可求的Question之error: Failed dependencies: MySQLconflicts 错误篇
- Unity3D学习笔记(二十七):MVC框架下的背包系统(2)
- LoadRunner手写脚本、检查点、集合点、事务、思考时间
- 静态Map类型变量赋初始值
- Linux下查看文档指令
- 如何安装Apache
- ZOJ 2112 Dynamic Rankings (动态第k大,树状数组套主席树)
- 【CodeForces】713 C. Sonya and Problem Wihtout a Legend
- Linux 学习笔记之关机问题
热门文章
- sosreport -a --report
- Bash shell的特性
- centos更换损坏硬盘uuid改变导致系统不能正常启动处理
- Mybatis 逆向工程使用(Day_17)
- Spring Cloud 升级之路 - 2020.0.x - 6. 使用 Spring Cloud LoadBalancer (1)
- protege 构建本体
- Python数模笔记-PuLP库(1)线性规划入门
- 关于lua闭包导致引用无法释放内存泄露
- 论文阅读:MDNet: Learning Multi-Domain Convolutional Neural Networks for Visual Tracking
- MindSpore静态图语法支持