request ------------ 将请求交给View类里的闭包函数 ------------> View.as_view() ------------------------> 返回view函数的引用 (返回的view函数名跟自定义的类名相同,且给该函数添加了view_class和view_initkwargs属性。其中view_class属性中的值是类的引用,view_initkwargs属性中的值是as_view()拿到的参数)
-------------当请求到达----------->调用view函数的执行结果即dispatch的返回值(经getattr拿到的方法,并执行方法)
【View.as_view函数源码】
@classonlymethod # 这个是只能被类调用的方法,如果被实例调用会报错
def as_view(cls, **initkwargs):
print('-------- 0 ----------')
"""Main entry point for a request-response process."""
for key in initkwargs: # 当url或path或re_path中填写了as_view(),在Django启动时首先会被执行
print('-------- 1 ----------')
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