CBV原始碼分析

2022-03-11 07:38:22 字數 1899 閱讀 4249

html(這裡只是單純的用來做請求而已,沒什麼用處,只是讓後端來判斷走哪個方法)

view

from django.views import view

class myreg(view):

def get(self,request):

return render(request,'reg.html')

def post(self,request):

return httpresponse("我是myreg類中post方法")

fbv與cbv 即cbv原始碼分析

fbv(function based view) 基於函式的檢視:我們之前一直都是這種模式,所以沒什麼好講的了

cbv(class based view) 基於類的檢視

你在類中寫了兩個方法 乙個叫get乙個叫post

為什麼前端get請求來就會觸發get方法

post請求來就會觸發post方法 如何實現的???

# cbv路由

url(r'^reg/',views.myreg.as_view())

@classonlymethod

def as_view(cls, **initkwargs):

def view(request, *args, **kwargs):

self = cls(**initkwargs) # cls就是我們自己的寫的myreg類

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)

# 物件在查詢屬性或方法的時候 順序是什麼? 先從自己找 再從產生物件的類中找 再去類的父類中找...

"""也就意味著你在看原始碼的時候 你一定要牢記上面的話"""

return view

"""cbv最精髓的部分"""

def dispatch(self, request, *args, **kwargs):

if request.method.lower() in self.http_method_names: # 判斷當前請求方式在不在預設的八個請求方式中

# handler = getattr(自己寫的類產生的物件,'小寫的請求方法(get\post)','獲取不到對應的方法就報錯'),這裡就拿到了(以get為例)我們自己寫的get方法了。

# handler就是我們自己定義的跟請求方法相對應的方法的函式記憶體位址

return handler(request, *args, **kwargs) # 在呼叫獲取到的方法,也就相當於get()

這時候就解決了我們上面的問題了。

看一下我們最開始寫的 urls

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^reg/', views.myreg.as_view()),

#這裡其實就是 url(r'^reg/',views.view)

]

FBV與CBV 及CBV原始碼分析

fbv function based view 基於函式的檢視 基於函式的檢視,我們一直在用沒啥好講的,就是匯入模組呼叫函式執行業務 cbv class based view 基於類的檢視 路由 url r haha views.zx view.as view 檢視 class zx view vi...

Django框架 CBV及原始碼分析

cbv 基於類的檢視函式 示例 urls.py url r login views.mylogin.as view views.py from django.views import view class mylogin view defget self,request print from myl...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...