信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作。
pip3 install blinker 根据flask项目的请求流程来进行设置扩展点
from flask import Flask,render_template
app = Flask(__name__)
@app.route('/index')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    return render_template('order.html')
class MyMiddleware(object):
    def __init__(self,old_app):
        self.wsgi_app = old_app.wsgi_app
    def __call__(self, *args, **kwargs):
        print('123')
        result = self.wsgi_app(*args, **kwargs)
        print('456')
        return result
app.wsgi_app = MyMiddleware(app)
if __name__ == '__main__':
    app.run()from flask import Flask,render_template
from flask import signals
app = Flask(__name__)
@signals.appcontext_pushed.connect
def f1(arg):
    print('appcontext_pushed信号f1被触发',arg)
@signals.appcontext_pushed.connect
def f2(arg):
    print('appcontext_pushed信号f2被触发',arg)
@app.route('/index')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    return render_template('order.html')
if __name__ == '__main__':
    app.run()
    # app.__call__
from flask import Flask,render_template
app = Flask(__name__)
@app.before_first_request
def f2():
    print('before_first_requestf2被触发')
@app.route('/index')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template
from flask import signals
app = Flask(__name__)
@signals.request_started.connect
def f3(arg):
    print('request_started信号被触发',arg)
@app.route('/index')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@app.url_value_preprocessor
def f5(endpoint,args):
    print('f5')
@app.route('/index/')
def index():
    print('index')
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@app.before_request
def f6():
    g.xx = 123
    print('f6')
@app.route('/index/')
def index():
    print('index')
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@signals.before_render_template.connect
def f7(app, template, context):
    print('f7')
@signals.template_rendered.connect
def f8(app, template, context):
    print('f8')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()
from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@app.after_request
def f9(response):
    print('f9')
    return response
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@signals.request_finished.connect
def f10(app,response):
    print('f10')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@app.before_first_request
def test():
    int('asdf')
@signals.got_request_exception.connect
def f11(app,exception):
    print('f11')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@app.teardown_request
def f12(exc):
    print('f12')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@signals.request_tearing_down.connect
def f13(app,exc):
    print('f13')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()from flask import Flask,render_template,g
from flask import signals
app = Flask(__name__)
@signals.appcontext_popped.connect
def f14(app):
    print('f14')
@app.route('/index/')
def index():
    return render_template('index.html')
@app.route('/order')
def order():
    print('order')
    return render_template('order.html')
if __name__ == '__main__':
    app.run()总结:关于flask内部共有14+个扩展点用于我们对flask框架内部进行定制,其中有:9个是信号。
template_rendered = _signals.signal("template-rendered")
before_render_template = _signals.signal("before-render-template")
request_started = _signals.signal("request-started")
request_finished = _signals.signal("request-finished")
request_tearing_down = _signals.signal("request-tearing-down")
got_request_exception = _signals.signal("got-request-exception")
appcontext_tearing_down = _signals.signal("appcontext-tearing-down")
appcontext_pushed = _signals.signal("appcontext-pushed")
appcontext_popped = _signals.signal("appcontext-popped")
message_flashed = _signals.signal("message-flashed")原文:https://www.cnblogs.com/zhufanyu/p/11937213.html