as_view源码流程步骤
API就是一个应用程序编程接口,接口,什么是接口呢,接口就是给一个url,能返回一些数据,这就叫接口,内部的东西我们看不到的,要的是能返回数据
话不多说,直接上图
from api import views 先引入过来,下面要写成as-view的形式,这也就是所谓的cbv

子类中没有,去父类中找

最终是在API里面

找到as-view 以及它的返回值;

返回值是返回的这个,真正取到的东西,取决于super后面返回的是什么;

这一步是什么意思呢,这是执行父类APIView里面的方法,继续往找》》

到这里点击view

然后到这里

找这个as_view的返回值

最终的返回值是这个view

最终这个就是我们找到的view;总之url里面的as_view执行成功之后,就会执行这个view,传送一个request就执行了 》》》继续往下看

上面的中间部分可以看不懂,可以看这个,最终执行的是dispatch,这个dispatch有括号,证明是一个实例方法的执行;》》也就是说,以我们的book为例,有人来访问book,真正执行的就是这个dispatch;匹配成功的真正方法是dispatch,也就是调用的这个,所有的源码部分也就写在dispatch里面

上面的这个dispatch可不是View里面的dispatch,而是下面的这个里面的dispathc,因为从头开始找的话,一直找,找到APIView里面就有dispatch方法

》》》一直往最下面找,这是APIView里面的dispatch方法,里面都是一些初始化操作,暂时不用管,主要看下面的分发操作,请看下下图

分发操作》》》什么意思呢,请看解释
如果是get方法,这个lower是小写的意思,也就是小写的get,在这个self.http_method_names里面的话,getattr进行反射,括弧中的意思是》》从当前类中去找小写的get方法》》找到之后,最终执行这个response = handler(request, *args, **kwargs)方法 》》》继续往下看

找到这个小写的get方法之后,作为response,作为dispatch的相应,也就是这次请求的响应,

下面是同学写的流程图,自己到时候也整理下:

浙公网安备 33010602011771号