FLASK信号
使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号。
自定义信号示例
from blinker import Namespace # Namespace:命名空间,防止多个信号冲突 1. 定义信号 sspace = Namespace() fire_signal = sspace.signal('fire') # 2. 监听信号 def fire_bullet(sender): print(sender) print('start fire bullet') fire_signal.connect(fire_bullet) # 3. 发送一个信号 fire_signal.send() # 这里默认传给sender一个None
已经定义好的信号
- 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`方法的信号。
from flask import template_rendered, got_request_exception # 每个信号传的值不同 def template_rendered_func(sender,template,context): # 处理信号 print('sender:',sender) print('template:',template) print('context:',context) template_rendered.connect(template_rendered_func) # 发信号 def request_exception_log(sender,exception): print(exception) got_request_exception.connect(request_exception_log) # 也可以通过装饰器订阅 @template_rendered.connect_via(app) def when_template_rendered(sender, template, context, **extra): print 'Template %s is rendered with %s' % (template.name, context)