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给客户端
    	
posted @ 2019-12-31 17:54  W文敏W  阅读(142)  评论(0编辑  收藏  举报