flask的信号

  什么是信号?信号可以帮助我们消除flask核心框架或者扩展应用之间的耦合,通过某个动作发生时发出通知消息来实现这个机制.简言之,信号允许特定的发送者在某事件发生时,发送通知消息给订阅者.
  flask有一系列的信号和扩展来实现信号机制.请记住信号是发送给订阅者的,订阅者无权修改数据.你会发现某些信号的功能和内置的渲染器很类似(例如:request_started类似于before_request()).但是她们的工作机理又有所不同.before_request()按照特定的顺序来处理,并且可以在不产生响应的情况下退出.
信号的最大的益处就是你可以分片段的来订阅,这种分段的订阅机制对单元测试来说非常有用.

  订阅信号
  可以用connect()方法来订阅一个信号,第一个参数为回调函数,第二个可选参数为发送者.disconnect()方法解除订阅.

  对于所有的flask信号,sender就是发送信号的应用。当你订阅一个信号的时候,务必填充sender,除非你想接收所有应用的消息。

  下面是一个例子,这个例子可以指出单元测试中所渲染的模板,并且能给出传递到模板上的变量。

from flask import template_rendered
from contextlib import contextmanager

@contextmanager
def captured_templates(app):
    recorded = []
    def record(sender, template, context, **extra):
        recorded.append((template, context))
    template_rendered.connect(record, app)
    try:
        yield recorded
    finally:
        template_rendered.disconnect(record, app)

  如上,connect方法将record和app关联起来,record为回调函数,app作为发送者。

 

 

posted @ 2013-02-22 21:01  brackenbo  阅读(700)  评论(0编辑  收藏  举报