Flask框架各種常見裝飾器示例

2022-09-28 01:33:13 字數 1768 閱讀 8716

效果類似django的pr程式設計客棧ocess_request的裝飾器

@app.before_request

def before(*args,**kwargs):

print('請求之前')

''www.cppcns.com'

如果允許通過訪問,可以return none

該裝飾器裝飾的函式如果有return其他內容則直接結束訪問,

效果有點類似django的process_reqeust中介軟體方法。

比如通過這個裝飾器寫登陸驗證,判斷其是否有session,沒有則不允許訪問,有則繼續訪問

然後通過request.path判斷訪問的函式,如果是登陸(白名單)則通過。

request.url 是完整的url

request.path是網域名稱後面的url正則

'''if request.path == '/login':

return none

user = session.get('user_info')

if user:

return none

return redirect('/login')

類似process_response

@app.after_request

def after(response):

#效果和process_response是一樣的,必須有返回值,沒有則報錯。

print('我走了')

return response

flask中介軟體裝飾器執行順序。

如果多個app.before_request和app.after_request,

那麼執行順序也和django類似,

app.before_request是按照從上而下執行(檔案的上下),app.after_request是自下而上執行。

如果在app.before_request中return了其他內容,請求被攔截,那麼不會執行檢視函式,

直接從最後乙個app.after_reqeust倒著開始執行所有after_request。

自定義錯誤頁面:

@app.error_handlers(404)

def error_404(arg程式設計客棧):

'''自定義錯誤頁面,根據狀態碼定製'''

return "404錯誤啦"

模板中定製方法:

前端直接呼叫後端函式的裝飾器:

@app.template_global()

def xx(a1,a2):

return a1+a2

'''這個裝飾器的作用就是,可以在前端直接通過}來呼叫後端的這個函式。

'''相當於filter的裝飾器

@app.template_filter()

def db(a1,a2,a3):

return a1+a2+a3

'''效果和django的filter相似,前端渲染的時候需要注意寫www.cppcns.com法

} 1是第乙個引數,後面是2,3引數。

'''第一次來請求操作的裝飾器:

@app.before_first_request

def first(*args,**kwargs):

pass

'''只有第一次請求時候才執行的函式裝飾器

'''flask的中介軟體一般感覺用處不大,不如裝飾器方便

通過重新複製app.wsgi_app,

重寫這個類的__call__方法,如上圖,只是增加了兩個列印,效果同process_request,process_response

Flask 特殊裝飾器

檢視中的裝飾器 否則這個裝飾器起不到任何作用 2 類檢視的裝飾器,需要重寫類檢視中的乙個類屬性 decorators 這個類屬性 是乙個列表或元組都可以,裡面裝的就是左右裝飾器 在請求 request 進入檢視函式之前執行,是全域性的裝飾器,每次請求都會走一遍這個裝飾器,這和django的中介軟體很...

Flask 之裝飾器有關

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

常見的裝飾器

不帶引數的裝飾器 def decorate func wraps func 執行函式前需要做的事 result func args,kwargs 執行函式後需要做的事,最後返回結果 return resultimport time from functools import wraps 引數的裝飾器...