Flask框架中的信號基於blinker,其主要就是讓開發者但是在flask請求過程當中定製一些用戶行爲。flask
安裝:pip3 install blinkerapp
request_started = _signals.signal('request-started') # 請求到來前執行 request_finished = _signals.signal('request-finished') # 請求結束後執行 before_render_template = _signals.signal('before-render-template') # 模板渲染前執行 template_rendered = _signals.signal('template-rendered') # 模板渲染後執行 got_request_exception = _signals.signal('got-request-exception') # 請求執行出現異常時執行 request_tearing_down = _signals.signal('request-tearing-down') # 請求執行完畢後自動執行(不管成功與否) appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 請求上下文執行完畢後自動執行(不管成功與否) appcontext_pushed = _signals.signal('appcontext-pushed') # 請求上下文push時執行 appcontext_popped = _signals.signal('appcontext-popped') # 請求上下文pop時執行 message_flashed = _signals.signal('message-flashed') # 調用flask在其中添加數據時,自動觸發
執行順序框架
appcontext_pushed = _signals.signal('appcontext-pushed') request_started = _signals.signal('request-started') 若是有render: before_render_template = _signals.signal('before-render-template') template_rendered = _signals.signal('template-rendered') request_finished = _signals.signal('request-finished') 若是視圖函數有異常: got_request_exception = _signals.signal('got-request-exception') request_tearing_down = _signals.signal('request-tearing-down') appcontext_tearing_down = _signals.signal('appcontext-tearing-down') appcontext_popped = _signals.signal('appcontext-popped') 若是使用信號: message_flashed = _signals.signal('message-flashed')
使用:ide
from flask import Flask,signals,render_template,flash app = Flask(__name__) def func1(*args,**kwargs): print('觸發信號:request_started') def func2(*args,**kwargs): print('觸發信號:appcontext_pushed') signals.request_started.connect(func1) signals.appcontext_pushed.connect(func2) @app.route('/login') def login(): return "LOGIN" if __name__ == '__main__': app.run()
信號與berfore_request()區別:函數
信號:實時監控數據操做(記錄日誌)
在請求處理原來基礎上添加額外操做 (信號比befors_request先執行)
befors_requets:能夠控制請求是否能夠繼續往下走(能夠有返回值)