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 装饰器的方式**
- 定义信号
signal = Namespace()
my_signal = signal.signal('my_signal')
- 发送信号
@app.route('/home', methods=['GET', 'POST'])
def home():
my_signal.send(app, data='发送的内容') # data: 和接受信号的参数名要对应
return 'home'
- 接受信号
@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()