drf—生命请求周期
一、APIView的请求生命周期总结
1)APIView类继承View类,重写了as_view和dispatch方法
2)重写的as_view方法,主体还是View的as_view,只是在返回视图view函数地址时,局部禁用csrf认证
3)重写的dispatch方法,
在执行请求逻辑前:请求模块(二次封装request)、解析模块(三种数据包格式的数据解析)
在执行请求逻辑中:异常模块(执行出现任何异常交给异常模块处理)
在执行请求逻辑后:响应模块(二次封装response)、渲染模块(响应的数据能JSON和页面两种渲染)
二、生命周期如下:
项目启动,请求来之前:
1 路由层调用父类APIView的类绑定方法as_view
2 在APIView的as_view方法中,调用APIView的父类View的类绑定方法as_view,并返回函数对象view
3 return csrf_exempt(view) 将view的csrf认证禁止后,再返回,等待请求来之后调用
请求来了之后:
1 View函数对象接收请求,调用视图类对象的绑定方法dispatch
2 根据对象绑定方法的查找顺序,触发APIView类中重写的dispatch方法
3 在dispatch方法中:
3.1 先完成wsgi处理过的request对象的二次封装,包括数据解析,封装到视图对象中
3.2 异常捕捉代码区:先调用对象绑定方法initial完成对二次封装后的request的三大认证
3.3 异常捕捉代码区:再通过反射获取实际请求对应的视图函数对象,并将此时的request对象作为参数调用视图函数
3.4 异常捕捉代码区:捕捉到异常后,调用异常处理模块处理异常,即对象的绑定方法handle_exception去调用
4 dispatch执行完视图函数或者异常处理后,调用响应模块(对象的绑定方法finalize_response)生成响应数据self.response,最后返回响应数据self.response给客户端