Django 视图的FBV 与 CBV
?
FBV(function base views)?基于函數(shù)的視圖,就是在視圖里使用函數(shù)處理請(qǐng)求。
CBV(class base views)?基于類的視圖,就是在視圖里使用類處理請(qǐng)求。
FBV
基于函數(shù)的視圖其實(shí)我們前面章節(jié)一直在使用,就是使用了函數(shù)來(lái)處理用戶的請(qǐng)求,查看以下實(shí)例:
路由配置:
urls.py 文件
urlpatterns?=?[path("login/",?views.login), ]views.py 文件
from?django.shortcuts?import?render,HttpResponsedef?login(request):if?request.method?==?"GET":return?HttpResponse("GET 方法")if?request.method?==?"POST":user?=?request.POST.get("user")pwd?=?request.POST.get("pwd")if?user?==?"runoob"?and?pwd?==?"123456":return?HttpResponse("POST 方法")else:return?HttpResponse("POST 方法1")如果我們?cè)跒g覽器中直接訪問(wèn) http://127.0.0.1:8000/login/ ,輸出結(jié)果為:
GET 方法CBV
基于類的視圖,就是使用了類來(lái)處理用戶的請(qǐng)求,不同的請(qǐng)求我們可以在類中使用不同方法來(lái)處理,這樣大大的提高了代碼的可讀性。
定義的類要繼承父類 View,所以需要先引入庫(kù):
from django.views import View執(zhí)行對(duì)應(yīng)請(qǐng)求的方法前會(huì)優(yōu)先執(zhí)行 dispatch 方法(在get/post/put...方法前執(zhí)行),dispatch() 方法會(huì)根據(jù)請(qǐng)求的不同調(diào)用相應(yīng)的方法來(lái)處理。
其實(shí),在我們前面學(xué)到的知識(shí)都知道 Django 的 url 是將一個(gè)請(qǐng)求分配給可調(diào)用的函數(shù)的,而不是一個(gè)類,那是如何實(shí)現(xiàn)基于類的視圖的呢? 主要還是通過(guò)父類 View 提供的一個(gè)靜態(tài)方法 as_view() ,as_view 方法是基于類的外部接口, 他返回一個(gè)視圖函數(shù),調(diào)用后請(qǐng)求會(huì)傳遞給 dispatch 方法,dispatch 方法再根據(jù)不同請(qǐng)求來(lái)處理不同的方法。
路由配置:
urls.py 文件
urlpatterns?=?[path("login/",?views.Login.as_view()), ]views.py 文件
from?django.shortcuts?import?render,HttpResponse from?django.views?import?Viewclass?Login(View):def?get(self,request):return?HttpResponse("GET 方法")def?post(self,request):user?=?request.POST.get("user")pwd?=?request.POST.get("pwd")if?user?==?"runoob"?and?pwd?==?"123456":return?HttpResponse("POST 方法")else:return?HttpResponse("POST 方法 1")如果我們?cè)跒g覽器中直接訪問(wèn) http://127.0.0.1:8000/login/ ,輸出結(jié)果為:
GET 方法總結(jié)
以上是生活随笔為你收集整理的Django 视图的FBV 与 CBV的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (三)通用视图(generic view
- 下一篇: Java基础—序列化底层原理