詳解Django中CBV(Class Base Views)模型源碼分析
在view文件中編寫一個類,并配置好路由
class Test(View):
def get(self, request, *args, **kwargs):
return HttpResponse('cbv_get')
def post(self, request, *args, **kwargs):
return HttpResponse('cbv_post')
url(r'test/',views.Test.as_view()),
通過as_view()進入查看源碼

實際上views.Test.as_view()是存的一個內(nèi)存地址,加括號被調(diào)用,執(zhí)行了as_view方法里的view方法,具體看下圖:

核心是dispatch方法,在dispatch方法中完成了分發(fā)功能。

若要在Test類中自定義dispatch方法,代碼如下:
class Test(View):
def dispatch(self, request, *args, **kwargs):
# 加代碼
obj = super().dispatch(self, request, *args, **kwargs)
# 加代碼
# 實現(xiàn)了一個類似裝飾器的效果,比如post請求,如果是json,手動從request里body取出來 再轉(zhuǎn)一下
# 或者走的時候加點cookie
return obj
def get(self, request, *args, **kwargs):
return HttpResponse('cbv_get')
def post(self, request, *args, **kwargs):
return HttpResponse('cbv_post')
流程總結(jié):
CBV模型
- 在views中寫一個類,繼承View,里面寫get方法,post方法
- 在路由中配置: url(r'^test/', views.Test.as_view()),實際上第二個參數(shù)位置,放的還是一個函數(shù)內(nèi)存地址
- 當請求來了,就會執(zhí)行第二個參數(shù)(request,參數(shù)),本質(zhì)上執(zhí)行view()
- view內(nèi)部調(diào)用了dispatch()方法
- dispatch分發(fā)方法,根據(jù)請求方式不同,執(zhí)行的方法不同
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python開發(fā)之字符串string操作方法實例詳解
這篇文章主要介紹了python開發(fā)之字符串string操作方法,以實例形式較為詳細的分析了Python針對字符串的轉(zhuǎn)義、連接、換行、輸出等操作技巧,需要的朋友可以參考下2015-11-11
python-redis-lock實現(xiàn)鎖自動續(xù)期的源碼邏輯
這篇文章主要介紹了python-redis-lock實現(xiàn)鎖自動續(xù)期的源碼邏輯,其中用到了多線程threading、弱引用weakref和Lua腳本等相關(guān)知識,需要的朋友可以參考下2024-07-07
Python隨機生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點
這篇文章主要為大家詳細介紹了Python隨機生成均勻分布在三角形內(nèi)或者任意多邊形內(nèi)的點,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
VSCode下配置python調(diào)試運行環(huán)境的方法
這篇文章主要介紹了VSCode下配置python調(diào)試運行環(huán)境的方法,需要的朋友可以參考下2018-04-04

