flask-信号用法blinker

发布时间 2023-03-22 21:09:27作者: Yancy00

插件blinker实现信号与槽.

# 创建信号
from blinker  import  Namespace
_signals=Namespace()
saved=_signals('saved')   # 创建名为saved的信号
# 槽函数
def on_saved(sender):
	print(f'捕获到{sender}发来的信号')
# 连接信号与槽
saved.connect(on_saved)
# 发送信号
saved.send(self)

flask中信号与槽

flask.signals.py文件中定义了常用的信号

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在其中添加数据时,自动触发

使用内置信号.和自定义信号.本质是一样的.

# 定义槽函数
from flask.signals import message_flashed
def on_msg_flashed(*args,**kwargs):
    print('触发信号',args,kwargs)
	
# 绑定给信号
message_flashed.connect(on_msg_flashed)

# 发送信号
@bp.route('/')
def hello_world():  # put application's code here
    flash('hello world')
    message_flashed.send()  #######
    return 'Hello World!'

自定义flask信号

from flask.signals import _signals

# 自定义信号
my_test_signal1=_signals.signal('my_test_signal1')  

# 定义信号对应槽函数
def on_my_test_signal1(sender,*args,**kwargs):
    print('触发信号',sender,args,kwargs)

# 连接信号与槽
my_test_signal1.connect(on_my_test_signal1)

# 触发信号
@bp.route('/signal1')
def signal_test1():
    my_test_signal1.send('123333',k1='yancy')
    return 'sent'
# 运行后,浏览器输入http://127.0.0.1:5000/signal1 
# 打印结果: 触发信号 123333 () {'k1': 'yancy'}