flask-信号
Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。
1 |
pip3 install blinker
|
1. 内置信号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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在其中添加数据时,自动触发
|
源码示例
request_started request_finished before_render_template template_rendered got_request_exception request_tearing_down appcontext_tearing_down appcontext_tearing_down appcontext_pushed appcontext_popped message_flashed2. 自定义信号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, current_app, flash, render_template
from flask.signals import _signals
app = Flask(import_name = __name__)
# 自定义信号
xxxxx = _signals.signal( 'xxxxx' )
def func(sender, * args, * * kwargs):
print (sender)
# 自定义信号中注册函数
xxxxx.connect(func)
@app .route( "/x" )
def index():
# 触发信号
xxxxx.send( '123123' , k1 = 'v1' )
return 'Index'
if __name__ = = '__main__' :
app.run()
|