信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作。

  1. pip3 install blinker

根据flask项目的请求流程来进行设置扩展点

  1. from flask import Flask,render_template
  2. app = Flask(__name__)
  3. @app.route('/index')
  4. def index():
  5. return render_template('index.html')
  6. @app.route('/order')
  7. def order():
  8. return render_template('order.html')
  9. class MyMiddleware(object):
  10. def __init__(self,old_app):
  11. self.wsgi_app = old_app.wsgi_app
  12. def __call__(self, *args, **kwargs):
  13. print('123')
  14. result = self.wsgi_app(*args, **kwargs)
  15. print('456')
  16. return result
  17. app.wsgi_app = MyMiddleware(app)
  18. if __name__ == '__main__':
  19. app.run()
  1. from flask import Flask,render_template
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.appcontext_pushed.connect
  5. def f1(arg):
  6. print('appcontext_pushed信号f1被触发',arg)
  7. @signals.appcontext_pushed.connect
  8. def f2(arg):
  9. print('appcontext_pushed信号f2被触发',arg)
  10. @app.route('/index')
  11. def index():
  12. return render_template('index.html')
  13. @app.route('/order')
  14. def order():
  15. return render_template('order.html')
  16. if __name__ == '__main__':
  17. app.run()
  18. # app.__call__
  1. from flask import Flask,render_template
  2. app = Flask(__name__)
  3. @app.before_first_request
  4. def f2():
  5. print('before_first_requestf2被触发')
  6. @app.route('/index')
  7. def index():
  8. return render_template('index.html')
  9. @app.route('/order')
  10. def order():
  11. return render_template('order.html')
  12. if __name__ == '__main__':
  13. app.run()
  1. from flask import Flask,render_template
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.request_started.connect
  5. def f3(arg):
  6. print('request_started信号被触发',arg)
  7. @app.route('/index')
  8. def index():
  9. return render_template('index.html')
  10. @app.route('/order')
  11. def order():
  12. return render_template('order.html')
  13. if __name__ == '__main__':
  14. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @app.url_value_preprocessor
  5. def f5(endpoint,args):
  6. print('f5')
  7. @app.route('/index/')
  8. def index():
  9. print('index')
  10. return render_template('index.html')
  11. @app.route('/order')
  12. def order():
  13. print('order')
  14. return render_template('order.html')
  15. if __name__ == '__main__':
  16. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @app.before_request
  5. def f6():
  6. g.xx = 123
  7. print('f6')
  8. @app.route('/index/')
  9. def index():
  10. print('index')
  11. return render_template('index.html')
  12. @app.route('/order')
  13. def order():
  14. print('order')
  15. return render_template('order.html')
  16. if __name__ == '__main__':
  17. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.before_render_template.connect
  5. def f7(app, template, context):
  6. print('f7')
  7. @signals.template_rendered.connect
  8. def f8(app, template, context):
  9. print('f8')
  10. @app.route('/index/')
  11. def index():
  12. return render_template('index.html')
  13. @app.route('/order')
  14. def order():
  15. print('order')
  16. return render_template('order.html')
  17. if __name__ == '__main__':
  18. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @app.after_request
  5. def f9(response):
  6. print('f9')
  7. return response
  8. @app.route('/index/')
  9. def index():
  10. return render_template('index.html')
  11. @app.route('/order')
  12. def order():
  13. print('order')
  14. return render_template('order.html')
  15. if __name__ == '__main__':
  16. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.request_finished.connect
  5. def f10(app,response):
  6. print('f10')
  7. @app.route('/index/')
  8. def index():
  9. return render_template('index.html')
  10. @app.route('/order')
  11. def order():
  12. print('order')
  13. return render_template('order.html')
  14. if __name__ == '__main__':
  15. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @app.before_first_request
  5. def test():
  6. int('asdf')
  7. @signals.got_request_exception.connect
  8. def f11(app,exception):
  9. print('f11')
  10. @app.route('/index/')
  11. def index():
  12. return render_template('index.html')
  13. @app.route('/order')
  14. def order():
  15. print('order')
  16. return render_template('order.html')
  17. if __name__ == '__main__':
  18. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @app.teardown_request
  5. def f12(exc):
  6. print('f12')
  7. @app.route('/index/')
  8. def index():
  9. return render_template('index.html')
  10. @app.route('/order')
  11. def order():
  12. print('order')
  13. return render_template('order.html')
  14. if __name__ == '__main__':
  15. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.request_tearing_down.connect
  5. def f13(app,exc):
  6. print('f13')
  7. @app.route('/index/')
  8. def index():
  9. return render_template('index.html')
  10. @app.route('/order')
  11. def order():
  12. print('order')
  13. return render_template('order.html')
  14. if __name__ == '__main__':
  15. app.run()
  1. from flask import Flask,render_template,g
  2. from flask import signals
  3. app = Flask(__name__)
  4. @signals.appcontext_popped.connect
  5. def f14(app):
  6. print('f14')
  7. @app.route('/index/')
  8. def index():
  9. return render_template('index.html')
  10. @app.route('/order')
  11. def order():
  12. print('order')
  13. return render_template('order.html')
  14. if __name__ == '__main__':
  15. app.run()

总结:关于flask内部共有14+个扩展点用于我们对flask框架内部进行定制,其中有:9个是信号。

  1. template_rendered = _signals.signal("template-rendered")
  2. before_render_template = _signals.signal("before-render-template")
  3. request_started = _signals.signal("request-started")
  4. request_finished = _signals.signal("request-finished")
  5. request_tearing_down = _signals.signal("request-tearing-down")
  6. got_request_exception = _signals.signal("got-request-exception")
  7. appcontext_tearing_down = _signals.signal("appcontext-tearing-down")
  8. appcontext_pushed = _signals.signal("appcontext-pushed")
  9. appcontext_popped = _signals.signal("appcontext-popped")
  10. message_flashed = _signals.signal("message-flashed")

版权声明:本文为zhufanyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhufanyu/p/11937213.html