效果類似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 引數的裝飾器...