06 cbv的view源码分析

 

 

cbv源码

# ModelViewSet继承View(django原生View)
# APIView继承了View
# 先读View的源码
from django.views import View
​
# urls.py
path('books1/', views.Books.as_view()),  #在这个地方应该写个函数内存地址,views.Books.as_view()执行完,是个函数内存地址,as_view是一个类方法,类直接来调用,会把类自动传入
放了一个view的内存地址(View--》as_view--》内层函数)
​
# 请求来了,如果路径匹配,会执行,  函数内存地址(request)
def view(request, *args, **kwargs):
    #request是当次请求的request
    self = cls(**initkwargs)  #实例化得到一个对象,Book对象
    if hasattr(self, 'get') and not hasattr(self, 'head'):
        self.head = self.get
        self.request = request
        self.args = args
        self.kwargs = kwargs
        return self.dispatch(request, *args, **kwargs)
​
 
def dispatch(self, request, *args, **kwargs):
        #request是当次请求的request   self是book对象
        if request.method.lower() in self.http_method_names:
            #handler现在是:
            #handler=getattr(self,'get'),你写的Book类的get方法的内存地址
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        return handler(request, *args, **kwargs)  #执行get(request)

 

 

 

 

 

 

 

 

补充:

查看源码

 

posted @ 2021-12-17 15:41  甜甜de微笑  阅读(34)  评论(0编辑  收藏  举报