flask-信号

一. 信号简介

1.1 简介

信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。

1.2 下载 >>> 第三方模块

pip install blinker

二. 自定义信号使用

2.1 普通方式

from flask import Flask
from blinker import Namespace

app = Flask(__name__)
app.debug = True

# 定义信号
signal = Namespace()
my_signal = signal.signal('my_signal')

# 接受信号
def monitor(app, data):
    print(app)
    print(data)


@app.route('/home', methods=['GET', 'POST'])
def home():

    # 参数是函数名
    my_signal.connect(monitor)

    # 发送信号
    my_signal.send(app, data='nihaoa')
    return 'home'


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

2.2 装饰器的方式**

  1. 定义信号
signal = Namespace()
my_signal = signal.signal('my_signal')
  1. 发送信号
@app.route('/home', methods=['GET', 'POST'])
def home():
    my_signal.send(app, data='发送的内容')    # data: 和接受信号的参数名要对应
    return 'home'
  1. 接受信号
@my_signal.connect_via(app)
def monitor(app, data):
    print(app)
    print(data)

三. 内置信号使用

3.1 内置信号

内置信号 说明
template_rendered 模版渲染完成后的信号。
before_render_template 模版渲染之前的信号。
request_started 模版开始渲染。
request_finished 模版渲染完成。
request_tearing_down request对象被销毁的信号。
got_request_exception 视图函数发生异常的信号。一般可以监听这个信号,来记录网站异常信息。
appcontext_tearing_down app上下文被销毁的信号。
appcontext_pushed app上下文被推入到栈上的信号。
appcontext_popped app上下文被推出栈中的信号
message_flashed 调用了Flask的flashed方法的信号。

3.2 使用 >>> 和自定义信号用法一致

from flask import Flask, render_template

# 1. 导入内置信号
from flask import template_rendered

app = Flask(__name__, template_folder='templates')
app.debug = True

# 2. 自定义函数  >>> 函数名随意
def my_func(sender, template, context):
    print(sender)
    print(template)
    print(context)

# 3. 监听信号 >>> 和自定义函数绑定
template_rendered.connect(my_func)

# 4. 对应的信号被触发时, 就会执行到自定义的函数
@app.route('/home', methods=['GET', 'POST'])
def home():
    return render_template("login.html", data="hello")


if __name__ == '__main__':
    app.run()
posted @ 2023-05-24 12:00  codegjj  阅读(8)  评论(0编辑  收藏  举报