溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django CBV類的用法詳解

發(fā)布時間:2020-08-21 18:38:25 來源:腳本之家 閱讀:170 作者:bainianminguo 欄目:開發(fā)技術

前言

之前我們在路由匹配的時候,一個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請求,則執(zhí)行get方法,如果是post請求,則執(zhí)行post方法

class class_login(views.View):
 # 1、如果是get請求,則執(zhí)行get函數
 
  @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post請求,則執(zhí)行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請求,則執(zhí)行get函數
 
  # @method_decorator(outer)
  def get(self,request,*args,**kwargs):
    print(request.path)
    return HttpResponse("yyyyyy")
 
  # 2、如果是post請求,則執(zhí)行post函數
  def post(self,request,*args,**kwargs):
    pass

dispatch就是django默認給我們定義的方法,在執(zhí)行get或者post方法之前會執(zhí)行的一個方法

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")

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI