06 cbv的view原始碼分析
阿新 • • 發佈:2021-12-17
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)