Falsk-信號

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')
View Code

使用

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:能夠控制請求是否能夠繼續往下走(能夠有返回值)
相關文章
相關標籤/搜索