這篇文章將為大家詳細(xì)講解有關(guān)Django中CBV模型的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
在view文件中編寫一個(gè)類,并配置好路由
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()進(jìn)入查看源碼
實(shí)際上views.Test.as_view()是存的一個(gè)內(nèi)存地址,加括號(hào)被調(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) # 加代碼 # 實(shí)現(xiàn)了一個(gè)類似裝飾器的效果,比如post請(qǐng)求,如果是json,手動(dòng)從request里body取出來 再轉(zhuǎn)一下 # 或者走的時(shí)候加點(diǎ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中寫一個(gè)類,繼承View,里面寫get方法,post方法
在路由中配置: url(r'^test/', views.Test.as_view()),實(shí)際上第二個(gè)參數(shù)位置,放的還是一個(gè)函數(shù)內(nèi)存地址
當(dāng)請(qǐng)求來了,就會(huì)執(zhí)行第二個(gè)參數(shù)(request,參數(shù)),本質(zhì)上執(zhí)行view()
view內(nèi)部調(diào)用了dispatch()方法
dispatch分發(fā)方法,根據(jù)請(qǐng)求方式不同,執(zhí)行的方法不同
關(guān)于“Django中CBV模型的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。