W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你可以使用信號的 connect() 方法來訂閱信號。該 函數(shù)的第一個(gè)參數(shù)是信號發(fā)出時(shí)要調(diào)用的函數(shù),第二個(gè)參數(shù)是可選的,用于確定信號 的發(fā)送端。退訂一個(gè)信號,可以使用 disconnect() 方法。
對于所有的核心 Flask 信號,發(fā)送端都是發(fā)出信號的應(yīng)用。當(dāng)你訂閱一個(gè)信號,請 確保也提供一個(gè)發(fā)送端,除非你確實(shí)想監(jiān)聽全部應(yīng)用的信號。這在你開發(fā)一個(gè)擴(kuò)展 的時(shí)候尤其正確。
比如這里有一個(gè)用于在單元測試中找出哪個(gè)模板被渲染和傳入模板的變量的助手上 下文管理器:
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)
這可以很容易地與一個(gè)測試客戶端配對:
with captured_templates(app) as templates:
rv = app.test_client().get('/')
assert rv.status_code == 200
assert len(templates) == 1
template, context = templates[0]
assert template.name == 'index.html'
assert len(context['items']) == 10
確保訂閱使用了一個(gè)額外的 **extra 參數(shù),這樣當(dāng) Flask 對信號引入新參數(shù) 時(shí)你的調(diào)用不會失敗。
代碼中,從 with 塊的應(yīng)用 app 中流出的渲染的所有模板現(xiàn)在會被記錄到 templates 變量。無論何時(shí)模板被渲染,模板對象和上下文中都會被添加到它 里面。
此外,也有一個(gè)方便的助手方法( connected_to() ) ,它允許你臨時(shí)地把函數(shù)訂閱到信號并使用信號自己的上下文管理器。因?yàn)檫@個(gè)上下文 管理器的返回值不能由我們決定,所以必須把列表作為參數(shù)傳入:
from flask import template_rendered
def captured_templates(app, recorded, **extra):
def record(sender, template, context):
recorded.append((template, context))
return template_rendered.connected_to(record, app)
上面的例子會看起來是這樣:
templates = []
with captured_templates(app, templates, **extra):
...
template, context = templates[0]
Blinker API 變更
connected_to() 方法出現(xiàn)于 Blinker 1.1 。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: