RESTful框架的API请求流程

 请看图!!

这个url表明在views这个视图下找到Class PublishView,再在这个类下面找到这个as_view()函数,返回一个函数名。当被调用的时候,执行这个函数。

但是我们可以看见这里面没有as_view()这个函数,所以往它的父类中寻找。

我们好不容易找到了,那我们来看看这里面到底返回了什么!

这里面又看到了,APIview这类往API这个父类中去执行,as_view()这个函数! 

(他到底要干啊!不妨我们在点进去看看) 

这里面这个self有点意思,这个self指的是APIview类,这个类下的dispatch这个函数,返回的是这个view这个函数名字。我们知道了返回值,但是又有新的问题,APIview类自己有as_view这个函数,不执行,偏偏非要用父类中的as_view()方法,然后通过父类中的as_view()函数来执行。自己的dispatch()这个函数。这不多此一举吗?

不着急,我们再来看看APIview这个类中的as_view()函数方法!

其实,这里面啥没有写,直接利用类的继承了父类中的as_view()的方法。然后,源码的作者的目的就是要用自己的dispatch()这个函数,

但是自己又不想写as-view()这个函数,所有才用这种继承的方式!来缩减代码!

总结:

用户请求前:
    1、视图类调用执行as_view()方法
    2、因视图类继承APIview
    3、在APIview中找到as_view()方法
    4、通过执行父类view中的as_view()方法返回view方法
    此时url=["",view.类.as_view()]------>url=["",APIView.as_view()]------->url=["",View.view]
用户发请求
    5、执行View中的as_view方法下的view方法,
    6、调用dispatch方法,通过判断请求格式,获取视图类的对应的请求方法
    7、通过反射执行对应视图类下的应用请求方法得到返回值并返回

猜你喜欢

转载自www.cnblogs.com/wuchenyu/p/9397762.html