Falsk-信号
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。
安装:pip3 install blinker
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在其中添加数据时,自动触发
执行顺序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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')
使用:
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:可以控制请求是否可以继续往下走(可以有返回值)