截至当前的代码:
https://cloud.189.cn/t/ZbERBjq6fmeu (1909221746)
路由系统的路径对应路由的路径规则,一般是会与一个视图函数对应的
然而在使用类视图时
我们的用法是,类名称调用了一个as_view()方法
这个如何理解?
具体需要研究一下源代码才行
关于 类名.as_view()首先考虑一下
类名.as_view()
?猜一猜这个as_view会是一个什么样的方法?
复习类的各种方法
第一步,深入 as_views
@classonlymethod
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process."""
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError("You tried to pass in the %s method name as a "
"keyword argument to %s(). Don't do that."
% (key, cls.__name__))
if not hasattr(cls, key):
raise TypeError("%s() received an invalid keyword %r. as_view "
"only accepts arguments that are already "
"attributes of the class." % (cls.__name__, key))
def view(request, *args, **kwargs):
self = cls(**initkwargs)
if hasattr(self, 'get') and not hasattr(self, 'head'):
self.head = self.get
self.setup(request, *args, **kwargs)
if not hasattr(self, 'request'):
raise AttributeError(
"%s instance has no 'request' attribute. Did you override "
"setup() and forget to call super()?" % cls.__name__
)
return self.dispatch(request, *args, **kwargs)
view.view_class = cls
view.view_initkwargs = initkwargs
# take name and docstring from class
update_wrapper(view, cls, updated=())
# and possible attributes set by decorators
# like csrf_exempt from dispatch
update_wrapper(view, cls.dispatch, assigned=())
return view
》习惯养成,如果有一个函数,我们应当如何去看待他
最主要看两个地方:
一,参数
二,返回值
同时关注,函数功能
再然后,才看它的一些逻辑
1,定义阶段快速过
2,调用阶段才会深入到函数内去了解
通过这些原则,帮助我们养成一个看函数或方法的好习惯
》看看as_view的参数
参数一,cls是什么?
参数二,是什么数据结构?
》再看返回值
》继续深入,返回的view又是一个什么?
我们知道,一个路径对应一个视图函数
一旦路径匹配成功
视图函数会运行
即,会有这样的一个效果
视图函数(request)
》即然。。。
类.as_view()
返回的是一个view函数
那么
一旦路径匹配成功
相当一会执行view(request)
对吧!
因此
关注一下view运行起来的效果
第二步,关注view方法
对象.方法()
意味着 view 方法 返回的是 dispatch方法的返回值
参数中的request是请求对象
返回值,返回的是dispatch的运行结果
第三层,关注dispatch方法
同样,关注它的返回值
返回值看懂了,就明白为什么get请求和post请求会对应上类视图中的对应方法了