• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Yancy00

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

flask-信号用法blinker

插件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'}

posted on 2023-03-21 10:32  Yancy00  阅读(44)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3