RESTful框架的API请求流程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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、通过反射执⾏对应视图类下的应⽤请求⽅法得到返回值并返回。