ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flask 信号

2022-09-06 08:30:09  阅读:231  来源: 互联网

标签:__ exception Flask signal request signals 信号 app


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()

继续努力,终成大器;

标签:__,exception,Flask,signal,request,signals,信号,app
来源: https://www.cnblogs.com/Blogwj123/p/16660375.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有