Flask 信号


8.flask 信号

参考文章:https://www.cnblogs.com/wupeiqi/articles/8249576.html

flask 的扩展点,源码中预留的钩子。

信号通过发送发生在核心框架的其他地方或Flask扩展的动作时的通知来帮助你解耦你的应用。简而言之,信号允许特定的消息发送端通知订阅者发生了什么。

安装:

pip install blinker

8.1 内置信号参数

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

补充:内置信号的源码示例请点击这里参考沛齐老师的文章介绍。

8.3 信号的简单使用

from flask import Flask,got_request_exception

app = Flask(__name__)

@app.route('/')
def zero_err():
    x = 1 / 0 # 设置自定义的异常
    return 'Hello~'

def errhandle(sender,exception): # 传入信号操作的函数,
    with open('text.log','a',encoding='utf-8') as f:
        f.write(str(sender) + '/n')
        f.write(str(exception) + '/n')

# 使用内置的信号函数,传入处理的函数。
got_request_exception.connect(errhandle) # 该信号的作用是发生异常的时候执行,
'''
其他内置信号参考对应的注释进行使用,并将对应的处理函数进行传入。
'''

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

8.3 自定义信号

from flask import Flask,current_app,flash,got_request_exception
from flask.signals import _signals
from blinker import Namespace


app = Flask(__name__)

# 自定义
xx = _signals.signal('xx')

def func(sender,*args,**kwargs):
    print(sender)

# 自定义信号中注册函数
xx.connect(func)

@app.route("/index")
def index():
    xx.send('1233')
    return "Home"

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

继续努力,终成大器;

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/287869.html

(0)
上一篇 2022年9月6日
下一篇 2022年9月6日

相关推荐

发表回复

登录后才能评论