CBV源码解析
执行流程:
路由配置:url(r'^test/', views.Test.as_view()),
请求通过中间件后进入路由--->根据路由匹配,一旦成功,会执行后面函数(request)--->
本质就是执行了as_view内部的view函数---->内部又调用了self.dispatch---->
根据请求方式,执行不同的方法(必然get请求,就会执行咱么写的视图类的get方法)
分析:
先创建一个视图函数
配置路由![](https://img2018.cnblogs.com/blog/1635143/201907/1635143-20190702151756304-1747122665.png)
然后按住ctrl键点进去看as_view的源码
然后再来分析
这里的self是view这个类的对象,我们在类视图继承了view这个类,就是我们Test这个类的对象,这里返回了一个dispatch方法,但是我们并没有定义这个方法,所以就去Test的父类View里面去找
然后找到dispatch
如果在这里面通过反射getattr去这self这个对象里也就是Test这个类的对象通过传过来的名字比如get去取东西,所以类里面的get必须带request
因为内部返回了*args,**kwargs,为了规范在类视图函数里也要加上