Flask 信号
8.flask 信号
参考文章:https://www.cnblogs.com/wupeiqi/articles/8249576.html
flask 的扩展点,源码中预留的钩子。
信号通过发送发生在核心框架的其他地方或Flask
扩展的动作时的通知来帮助你解耦你的应用。简而言之,信号允许特定的消息发送端通知订阅者发生了什么。
安装:
pip install blinker
8.1 内置信号参数
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在其中添加数据时,自动触发
补充:内置信号的源码示例请点击这里参考沛齐老师的文章介绍。
8.3 信号的简单使用
from flask import Flask,got_request_exception
app = Flask(__name__)
@app.route('/')
def zero_err():
x = 1 / 0 # 设置自定义的异常
return 'Hello~'
def errhandle(sender,exception): # 传入信号操作的函数,
with open('text.log','a',encoding='utf-8') as f:
f.write(str(sender) + '\n')
f.write(str(exception) + '\n')
# 使用内置的信号函数,传入处理的函数。
got_request_exception.connect(errhandle) # 该信号的作用是发生异常的时候执行,
'''
其他内置信号参考对应的注释进行使用,并将对应的处理函数进行传入。
'''
if __name__ == '__main__':
app.run(debug=True)
8.3 自定义信号
from flask import Flask,current_app,flash,got_request_exception
from flask.signals import _signals
from blinker import Namespace
app = Flask(__name__)
# 自定义
xx = _signals.signal('xx')
def func(sender,*args,**kwargs):
print(sender)
# 自定义信号中注册函数
xx.connect(func)
@app.route("/index")
def index():
xx.send('1233')
return "Home"
if __name__ == '__main__':
app.run()
继续努力,终成大器;