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()
继续努力,终成大器;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?