Django CBV模型源碼運(yùn)行流程詳解
在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()進(jìn)入查看源碼

實(shí)際上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) # 加代碼 # 實(shí)現(xiàn)了一個類似裝飾器的效果,比如post請求,如果是json,手動從request里body取出來 再轉(zhuǎn)一下 # 或者走的時候加點(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中寫一個類,繼承View,里面寫get方法,post方法 在路由中配置: url(r’^test/’, views.Test.as_view()),實(shí)際上第二個參數(shù)位置,放的還是一個函數(shù)內(nèi)存地址 當(dāng)請求來了,就會執(zhí)行第二個參數(shù)(request,參數(shù)),本質(zhì)上執(zhí)行view() view內(nèi)部調(diào)用了dispatch()方法 dispatch分發(fā)方法,根據(jù)請求方式不同,執(zhí)行的方法不同以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 使用Python webdriver圖書館搶座自動預(yù)約的正確方法2. Linux刪除系統(tǒng)自帶版本Python過程詳解3. ASP基礎(chǔ)知識VBScript基本元素講解4. Python 合并拼接字符串的方法5. Python 利用Entrez庫篩選下載PubMed文獻(xiàn)摘要的示例6. Python3 json模塊之編碼解碼方法講解7. Python 制作查詢商品歷史價格的小工具8. ASP.NET MVC使用jQuery ui的progressbar實(shí)現(xiàn)進(jìn)度條9. Python sublime安裝及配置過程詳解10. python 使用事件對象asyncio.Event來同步協(xié)程的操作

網(wǎng)公網(wǎng)安備