Flask 特殊裝飾器

2022-09-18 12:12:12 字數 2352 閱讀 8656

-----------------------檢視中的裝飾器----------------------

否則這個裝飾器起不到任何作用;

2、類檢視的裝飾器,需要重寫類檢視中的乙個類屬性`decorators`,這個類屬性

是乙個列表或元組都可以,裡面裝的就是左右裝飾器;

在請求(request)進入檢視函式之前執行,是全域性的裝飾器,每次請求都會走一遍這個裝飾器,這和django的中介軟體很像登入驗證

from flask import flask,render_template,send_file,request,redirect,session

def auth():

# 白名單放行

if request.path == "/login":

return none

# 判斷是否是登入使用者

if session.get("username"):

return none

else:

# 如果不是登入頁面就會跳轉到登入頁面

return redirect("login")

def login():

if request.method=="get":

return render_template("login.html")

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

password = request.form.get("password")

# 判斷使用者名稱和密碼是否正確

if username=="henry" and password=="123456":

# 登入成功後設定session

session["username"] = username

# 訪問home頁面之前會先走before_request裝飾器,每個請求都會完整的走一遍before_request裝飾器

return redirect("home")

else:

return "使用者名稱或密碼錯誤"

def home():

return "home"

if __name__ == '__main__':

request.path 是來讀取當前的url位址如果是 /login 就允許直接通過 return none 你可以理解成通過放行

校驗session中是否有user 如果沒有的話,證明沒有登入,所以毫不留情的 redirect("/login") 跳轉登入頁面

在響應(response)返回客戶端之前執行 , 結束檢視函式之後

def foot_log(environ):

if request.path != "/login":

print("有客人訪問了",request.path)

順序:be1 - be2 - be3 - 檢視函式 - af3 - af2 - af1

順序:be1 - be2 - af3 - af2 - af112

1.有引數的裝飾器errorhandler(監聽錯誤狀態碼5xx4xxint)

2.所裝飾的函式必須有乙個形參來接受 errormessage

# 監測錯誤狀態碼

def error(error_message):

return redirect("")

頁面

1、用法:可以在全域性範圍的模板中使用這個函式, 而不用通過引數傳到模板中 

# 這個方法每呼叫一次就需要傳一次, 將他做成乙個全域性的就用這麼麻煩了

def jiafa(a, b):

return int(a) + int(b)

2、在模板中使用

1、用法

def jianfa(a, b, c):

return a - b - c

2、在模板中這樣使用

flask的路由配置,特殊裝飾器

1,flask中的路由 2,flask中的例項化配置 class debug object 4,blueprint 5,特殊裝飾器 def af1 response 正常 be1 be2 be3 af3 af2 af1 異常 be1 af3 af2 af1 def error404 args 基於藍...

Flask中那些特殊的裝飾器

用法 記得加括號 def jiafa a,b 這個方法每呼叫一次就需要傳一次,將他做成乙個全域性的就用這麼麻煩了 return int a int b 在模板中這樣使用 可以在全域性範圍的模板中使用這個函式,而不用通過引數傳到模板中 用法 def jianfa a,b,c return a b c ...

Flask 之裝飾器有關

報錯的大概意思就是存在相同的view,在flask中,如果定義了兩個相同函式名的view,就會報這種報這種錯誤,例如 但是上例中的兩個函式名分別是index和course,是不相同的,為什麼會報這種錯?我經過查詢發現,這是因為python裝飾器本質上就是函式的鏈式呼叫 解決方法 在裝飾externa...