flask框架之信号blinker、内置信号signal

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

信号

Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为,flask默认提供了一些内置信号在特殊的位置,你可以在这些逻辑位置进行功能自定义,想使用信号,要记得安装blinker,如果没有安装该库就无法使用信号功能,但不影响其他功能

pip install blinker

信号采用发布者-订阅者(观察者)模式完成,当触发信号时,监听信号的函数就会被执行

使用信号

编写当信号触发时的回调函数

def func(*args, **kwargs):  # 信号触发时的功能方法
    print("信号测试")

触发信号是没有返回值的,写不写返回值都无所谓

使用某信号绑定该函数

使用信号的connect方法进行方法绑定

使用disconnect方法可以退订信号

signals.request_started.connect(func)

内置信号

模版渲染有关

# 模板渲染后执行
template_rendered = _signals.signal('template-rendered')
# 模板渲染前执行
before_render_template = _signals.signal('before-render-template')

请求有关

# 请求到来前执行
request_started = _signals.signal('request-started')
# 请求结束后执行
request_finished = _signals.signal('request-finished')

异常处理有关

# 请求执行出现异常时执行
got_request_exception = _signals.signal('got-request-exception') 

处理结束后

# 请求执行完毕后自动执行(无论成功与否)
request_tearing_down = _signals.signal('request-tearing-down') 
# 应用上下文执行完毕后自动执行(无论成功与否)
appcontext_tearing_down = _signals.signal('appcontext-tearing-down')

其他

# 应用上下文push时执行
appcontext_pushed = _signals.signal('appcontext-pushed')
# 应用上下文pop时执行
appcontext_popped = _signals.signal('appcontext-popped')
# 调用flash在其中添加数据时,自动触发
message_flashed = _signals.signal('message-flashed')

自定义信号

除了使用内置信号,我们还可以自定义信号,并且手动触发信号抛出,执行信号回调方法

首先自定义信号标示

from flask.signals import _signals

own_signal = _signals.signal("own_signal") # 定义信号

接着编写信号回调方法

def func(*args, **kwargs):  # 信号触发时的功能方法
    print(args, kwargs)

然后绑定到信号上

own_signal.connect(func)

在合适的位置触发这个信号

own_signal.send(sender="views", id=1)
'''
sender: 发送标示,自定义即可
id=1: 自定义参数,会传递到信号回调函数的kwargs位置
'''
# {'sender': 'views', 'id': 1}

猜你喜欢

转载自blog.csdn.net/HeroicLee/article/details/120991422
今日推荐