django CBV加裝飾器

2021-09-24 13:45:33 字數 2117 閱讀 9480

cbv(class base view)

基於session實現的裝飾器:

登入了就給session設定值(生成隨機序列),然後存入資料庫,並將一串隨機序列鍵值對返回給瀏覽器端,若未登入則跳轉到登入頁面。

def login_auth(func):

@wraps(func)

def inner(request,*args,**kwargs):

if request.session.get('name'):

return func(request,*args,**kwargs)

return redirect('/login/')

return inner

類檢視裝飾器:

主要有三種裝飾位置:

from django.utils.decorators import method_decorator

method_decorator這是乙個函式:將函式裝飾器轉換為方法裝飾器

converts a function decorator into a method decorator

有三種方式裝飾類:

簡單登入的跳轉的**

#登入判斷使用者名稱與密碼是否正確

if request.method == "post":

username = request.post.get("username")

pwd = request.post.get("pwd")

if username == 'jeason' and pwd == '123':

#使用者名稱密碼正確了就給session賦值,然後session將生成密碼序列存於資料庫中,並**給瀏覽器端,

request.session['name'] = 'jeason'

return redirect('/home/')

return render(request,'login.html')

#登入裝飾器,當你的session中有值說明你已經登入了,跳轉到home,若是沒有值則回到登入

def login_auth(func):

@wraps(func)

def inner(request,*args,**kwargs):

if request.session.get('name'):

return func(request,*args,**kwargs)

return redirect('/login/')

return inner

#類裝飾器三種方式,裝飾單個函式,與裝飾dispatch,dispatch中執行的判斷請求型別,

在view類中反射出view中的post或者get等方法,然後執行函式。

return httpresponse("post")urls.py中**如下:

url(r'^home/', views.myhome.as_view()),

url(r'^login/', views.login),

CBV加裝飾器

我們知道在函式上如何加裝飾器,那麼在類上如何加裝飾器呢?下面寫乙個登入校驗示例 匯入 from django.utils.decorators import method decorator 裝飾器 def auth func def inner request,args,kwargs 登入校驗 i...

給CBV加裝飾器

裝飾器def 在django中給cbv加裝飾器需要匯入模組 from django.utils.decoreation import method decorator 先要有個類作位 主頁,必須登入才能訪問 cbv class home view defget self,request pass d...

python中裝飾器之疊加裝飾器(二)

當乙個函式疊加了多個裝飾器後,程式會如何執行呢?疊加裝飾器 在同乙個被裝飾物件中,新增多個裝飾器,並執行。裝飾1 裝飾2 裝飾3 def被裝飾物件 pass注意 裝飾器在呼叫被裝飾物件時才會執行新增的功能。裝飾的順序 由下到上 被包裹 執行的順序 由上倒下 貫穿 def def inner1 arg...