Django 视图的FBV 与 CBV
?
FBV(function base views)?基于函數的視圖,就是在視圖里使用函數處理請求。
CBV(class base views)?基于類的視圖,就是在視圖里使用類處理請求。
FBV
基于函數的視圖其實我們前面章節一直在使用,就是使用了函數來處理用戶的請求,查看以下實例:
路由配置:
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")如果我們在瀏覽器中直接訪問 http://127.0.0.1:8000/login/ ,輸出結果為:
GET 方法CBV
基于類的視圖,就是使用了類來處理用戶的請求,不同的請求我們可以在類中使用不同方法來處理,這樣大大的提高了代碼的可讀性。
定義的類要繼承父類 View,所以需要先引入庫:
from django.views import View執行對應請求的方法前會優先執行 dispatch 方法(在get/post/put...方法前執行),dispatch() 方法會根據請求的不同調用相應的方法來處理。
其實,在我們前面學到的知識都知道 Django 的 url 是將一個請求分配給可調用的函數的,而不是一個類,那是如何實現基于類的視圖的呢? 主要還是通過父類 View 提供的一個靜態方法 as_view() ,as_view 方法是基于類的外部接口, 他返回一個視圖函數,調用后請求會傳遞給 dispatch 方法,dispatch 方法再根據不同請求來處理不同的方法。
路由配置:
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")如果我們在瀏覽器中直接訪問 http://127.0.0.1:8000/login/ ,輸出結果為:
GET 方法總結
以上是生活随笔為你收集整理的Django 视图的FBV 与 CBV的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (三)通用视图(generic view
- 下一篇: Django:序列化的几种方法