flask信号

flask信号

什么是信号?

项目功能复杂,代码量越大,就越需要做业务解耦,我们在程序的某些环节发出信号,我们如果给这个信号绑定了方法,那么就会触发方法的执行。

flask框架的信号基于blinker模块,在框架的一些核心功能做扩展时,我们可以只让其执行一句发出信号的代码,扩展的功能写在别处。

pip install blinker

内置信号

基本使用

from flask import Flask
from flask import signals

# 1.定义一个函数
def exception_log(*args, **kwargs):
    print('出错了,记录一下', args, kwargs)


app = Flask(__name__)
# 2.导入内置信号,并绑定函数
signals.got_request_exception.connect(exception_log)


@app.route('/')
def index():
    # 3.执行到这里的时候自动触发函数
    9 / 0
    return 'hello world'


if __name__ == '__main__':
    app.run()

flask内置信号总结

# 内置信号: flask少一些,django多一些
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在其中添加数据时,自动触发

自定义信号

  1. 定义出一个新的信号

    信号名=_signals.signal('信号名')

  2. 写一个函数,并绑定自定义的信号

    信号名.connect(函数)

  3. 自定义指定位置触发

    信号名.send('可以传入一些参数,与函数所需参数对应')

django中使用信号

https://www.cnblogs.com/liuqingzheng/articles/9803403.html

posted @ 2023-04-07 20:19  leethon  阅读(13)  评论(0编辑  收藏  举报