菜单

澳门金沙国际:详解Python的Flask框架中的signals随机信号机制

2019年5月30日 - 金沙编程资讯

订阅示例:

订阅示例:

3.flask.appcontext_tearing_down

其1时域信号发送于请求实行中发出极其的时候。它的出殡和埋葬 早于 标准13分管理介于。
在调试格局下,就算未有十三分管理,但发生非常时也发送这一个能量信号。能量信号传递的exception是那些对象。

当使用闪现三个消息时会发出这么些时域信号。message`参数是音讯内容,
`category参数是音信种类。

当一个行使的情况被压入时,应用会发送这些复信号。那一个确定性信号平时用于在单元测试中
不时钩接音讯。举例能够用于转移g对象中留存的能源。

发送复信号

5.appcontext_popped

from contextlib import contextmanagerfrom
flask import appcontext_pushed
@contextmanagerdef user_set(app, user):
  def handler(sender, **kwargs):
    g.user = user
  with appcontext_pushed.connected_to(handler, app):
    yield
from flask.singles import Namespace

2.flask.request_started

recorded = []def record(sender, message, category, **extra):
  recorded.append((message, category))
from flask import message_flashed
message_flashed.connect(record, app)

小结 功率信号能够令你在一须臾间安全地订阅它们。比方,这么些权且的订阅对测试很有帮扶。使用信号时,不要让信号订阅者(接收者)发生非常,因为特别会促成程序中断。

其一非确定性信号发送于请求崩溃的时候,不管是否吸引那么些。最近,侦听此实信号的函数在形似
崩溃管理器后调用,不过未有何东西可用。

Flask
提供了时限信号(Signals)效率,是1种新闻分发机制。类似于钩子(Hooks)。使用频域信号成效能够下落程序的耦合,分解复杂的事务模型。比方在立异了成品数量后,能够发送三个实信号。当有亟待对成品数据开始展览管理的效益时,就能够捕获功率信号实行拍卖。譬喻要白手起家产品缓存,或是更新搜索索引等。

Flask 随机信号作用应用了 Blinker 模块,所以要求先安装 Blinker 模块

其1时域信号发送于请求开头此前,且请求意况设置落成之后。因为请求遭逢已经绑定,
所以订阅者能够用规范的全局代理,如 request 来操作请求。

4.flask.appcontext_pushed

用法示例:

def close_db_connection(sender, **extra):
  session.close()from flask import request_tearing_down
appcontext_tearing_down.connect(close_db_connection, app)
def close_db_connection(sender, **extra):
  session.close()from flask import appcontext_tearing_down
request_tearing_down.connect(close_db_connection, app)

1.flask.template_rendered

以此功率信号发送于三个模板被渲染成功后。功率信号传递的template是模板的实例,context是意况指标是三个字典。

这还有可能会传递一个exc关键字参数,倘使这些参数存在的话。那个参数是诱惑崩溃的
万分的引用。

在测试代码中那样写:

def log_request(sender, **extra):
  sender.logger.debug('Request context is set up')
from flask import request_started
request_started.connect(log_request, app)
flask.request_finished
product_saved.send(app, product=product)

概念二个非模拟信号:

也能够运用 Flask 包装的 singles 对象:

订阅示例:

@product_saved.connect_via(app)
def updateCache(app, product):
  print(product)
def test_user_me(self):
  with user_set(app, 'john'):
    c = app.test_client()
    resp = c.get('/users/me')
    assert resp.data == 'username=john'
New in version 0.10.
pip install blinker

在 Flask 版本 0.玖中,那还可能会传递一个exc关键字参数,如若那些参数存在的话。
这么些参数是吸引崩溃的非常的引用。

你或者感兴趣的稿子:

def log_response(sender, response, **extra):
  sender.logger.debug('Request context is about to close down. '
            'Response: %s', response)
from flask import request_finished
request_finished.connect(log_response, app)
flask.got_request_exception

Flask 中有以下为主能量信号:

订阅示例:

def log_template_renders(sender, template, context, **extra):
  sender.logger.debug('Rendering template "%s" with context %s',
            template.name or 'string template',
            context)
from flask import template_rendered
template_rendered.connect(log_template_renders, app)

出殡时限信号须要带上 app 实例方法,示比如下:

当应用情形崩溃时发送那几个时域信号。那一个非确定性信号总是会发送,乃至是因为1个至极引发的
崩溃。侦听那个时限信号的函数会在正规崩溃管理器后被调用,不过你不可能回馈那一个能量信号。

订阅示例:

当二个运用的条件被弹出时,应用会发送那么些连续信号。那么些时限信号平日写成appcontext_tearing_down
信号。

from blinker import Namespace
product_saved = Namespace()

其一时限信号发送于向客户端发送响应以前。功率信号传递的response为就要发送的响应。

吸收接纳能量信号可以应用 connect_via 装饰器函数:

def log_exception(sender, exception, **extra):
  sender.logger.debug('Got exception during processing: %s', exception)
from flask import got_request_exception
got_request_exception.connect(log_exception, app)
flask.request_tearing_down

6.flask.message_flashed

app 前面能够增加要传递的参数,但必须以 name=value
的格式,不援救采用单个变量名的法子。

概念连续信号

订阅示例:

收接时限信号

订阅示例:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图