前言
这几年一直在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}