请求与响应
1.Request类
DRF的Request不再是原生Django里的HttpRequest,而是DRF提供的拓展了HttpRequest类的Request对象,所以其用法和HttpRequest大致相同但也有不同之处
在原生Django中put请求提交的数据在requuest.POST中是取不到的而在DRF的Request类通过request.data就可以获取POST、PUT、PATCH请求方式解析后的数据
drf 请求的所有 url 拼接参数都被解析到 request.query_params 中,原生Django中request.GET功能一样
ps:其他的用法与之前原生Django一样,继承APIView后每一次请求都是一个新的request
2.Response类
DRF提供了一个响应类Response,使用该类构造响应对象时,响应的具体内容数据会被转换成符合前端需求的类型
3.请求编码与响应编码
请求编码:
请求默认能解析的请求编码:urlencoded、form-data、json三种编码方式,但其实是因为在drf内置的配置文件中提前配置好了
# dif有两套配置 一套在项目的settings.py中另一套是默认的配置 REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( # 默认响应渲染类 ‘rest_framework.parsers.JSONParser', # 可以解析json格式 'rest_framework.renderers.FormParser', # 可以解析urlencoded格式 'rest_framework.renderers.MultiPartParser', # 可以解析form-data格式 ) }
但是定义在配置文件中的话太广泛了,我们也可以根据每个视图类的具体要求在视图类中局部配置这样解析类就会优先使用视图类自己的
class TestView(APIView): parser_classes = [JSONParser,FormParser,MultiPartParser] # 指定视图类支持哪个解析格式
ps:再视图类中局部配置后解析类的使用顺序成为:优先视图类自己的然后用项目 settings.py配置文件中配置的,最后再用内置配置文件内的
响应编码
响应再返回的时候会根据用浏览器还是接口测试工具展示出不同的样子,在浏览器中展示会有好看的样子而在接口测试工具中展示的是json格式,默认情况下响应编码是根据客户端类型决定的
全局配置:在项目配置文件中配置(settings.py)
REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', # json格式 'rest_framework.renderers.BrowsableAPIRenderer', #浏览器的格式 ] }
局部配置:在视图类中单独配置
class TestView(APIView): renderer_classes = [JSONRenderer,]
ps:和请求编码一样使用顺序也是优先视图类自己再项目文件配置,但是在实际编码中响应一般不配配置使用默认的