1. 程式人生 > 其它 >06 cbv的view原始碼分析

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)

補充:

檢視原始碼