您好,登錄后才能下訂單哦!
前言
之前我們在路由匹配的時候,一個url對應一個函數,其實我們還可以一個url對應一個類,這個就是CBV,下面我們來簡單的介紹一下CBV
一、CBV的基本用法
1、在路由匹配中要這樣寫,class_login是對應的類,as_view()是固定寫法,必須要這么寫,記住后面有個括號
url(r'^class_login/', views.class_login.as_view()),
2、在視圖函數中導入一個模塊
from django import views
3、在視圖函數中寫一個類,如果是get請求,則執行get方法,如果是post請求,則執行post方法
class class_login(views.View): # 1、如果是get請求,則執行get函數 @method_decorator(outer) def get(self,request,*args,**kwargs): print(request.path) return HttpResponse("yyyyyy") # 2、如果是post請求,則執行post函數 def post(self,request,*args,**kwargs): pass
4、post和get請求是最常見的,還有其他的方法,我們看下視圖函數中繼承的父類View中的方法,還支持如下這么多的方法
http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
二、裝飾器
上面基本的用法我們就已經介紹完了,如果要用裝飾器,該怎么弄呢?
1、需要導入一個模塊
from django.utils.decorators import method_decorator
2、然后定義一個裝飾器
def outer(func): def inner(request,*args,**kwargs): print(request.method) rep = func(request,*args,**kwargs) return rep return inner
3、我們該如何把裝飾器加的類中的,就需要用到我們第一步導入的模塊了
3_1、為類中的一個函數添加裝飾器,方法如下
@method_decorator(outer) def get(self,request,*args,**kwargs): print(request.path) return HttpResponse("yyyyyy")
3_2、為類中的所有的方法添加裝飾器,方法如下
@method_decorator(outer,name="dispatch") class class_login(views.View): # 1、如果是get請求,則執行get函數 # @method_decorator(outer) def get(self,request,*args,**kwargs): print(request.path) return HttpResponse("yyyyyy") # 2、如果是post請求,則執行post函數 def post(self,request,*args,**kwargs): pass
dispatch就是django默認給我們定義的方法,在執行get或者post方法之前會執行的一個方法
4、子類如果想調用父類的方法,有兩種方法來實現
class login(views.View): def dispatch(self, request, *args, **kwargs): # 調用父類的dispatch方法的兩種方法 # 方式1 super(login,self).dispatch(request,*args,**kwargs) # 方式2 super().dispatch(request, *args, **kwargs) return HttpResponse("ok") def get(self,request): return HttpResponse("get") def post(self,rquest): return HttpResponse("post")
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。