Django的FBV和CBV的範例講解

不言
發布: 2019-03-06 14:54:43
轉載
1935 人瀏覽過

這篇文章帶給大家的內容是關於Django的FBV和CBV的範例講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

FBV : function base views,  就是在檢視中使用函數處理請求。

urlpatterns = [
    path('index/', views.index),
]
# 视图函数里
def index(request):
    return render(request,"index.html")
登入後複製

CBV : class base views,  就是在檢視裡使用類別處理請求。

urlpatterns = [
    path("login/",views.LoginView.as_view())
]
# 视图函数里
class LoginView(View):

    def dispatch(self, request, *args, **kwargs):
        """
        重写dispatch方法, 可以放一些专属于LoginView的操作
        """
        return ...

    def get(self,request):
        return HttpResponse("OK")

    def post(self,request):
        return HttpResponse("OK")

    def put(self,request):
        return HttpResponse("OK")

    def delete(self,request):
        return HttpResponse("OK")
登入後複製

CBV的原始碼剖析: 

Django的url是將一個請求指派給可呼叫的函數的,而不是一個class。針對這個問題,class-based view(即Django的基礎View類別)提供了一個 as_view()  的靜態方法(也就是類別方法),呼叫這個方法,會透過  self = cls(**initkwargs)  創建一個類別的實例,然後透過實例呼叫 dispatch()方法,dispatch()方法會根據request的method的不同呼叫對應的方法來處理request(如get() , post()等)。到這裡,這些方法和function-based view差不多了,要接收request,得到一個response回傳。如果方法沒有定義,會拋出HttpResponseNotAllowed異常。

為什麼要有CBV這種模式? 

python的一大重要的特色就是物件導向。而cbv更能體現python的物件導向。 cbv是透過class的方式來實作視圖方法的。 class相對於function,更能利用多態的特定(多態: 可對不同類別的物件使用同樣的運算),因此更容易從宏觀層面上將專案內的比較通用的功能抽像出來。

以上是Django的FBV和CBV的範例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!