CBV源码解析

执行流程:

  路由配置:url(r'^test/', views.Test.as_view()),

  请求通过中间件后进入路由--->根据路由匹配,一旦成功,会执行后面函数(request)--->

  本质就是执行了as_view内部的view函数---->内部又调用了self.dispatch---->

  根据请求方式,执行不同的方法(必然get请求,就会执行咱么写的视图类的get方法)

分析:

先创建一个视图函数

配置路由

然后按住ctrl键点进去看as_view的源码

然后再来分析

这里的self是view这个类的对象,我们在类视图继承了view这个类,就是我们Test这个类的对象,这里返回了一个dispatch方法,但是我们并没有定义这个方法,所以就去Test的父类View里面去找

然后找到dispatch

如果在这里面通过反射getattr去这self这个对象里也就是Test这个类的对象通过传过来的名字比如get去取东西,所以类里面的get必须带request

因为内部返回了*args,**kwargs,为了规范在类视图函数里也要加上

原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11121005.html