Flask
сигналы
Поиск…
замечания
Flask поддерживает сигналы с помощью Blinker . Поддержка сигналов необязательна; они будут включены, только если установлен Blinker.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
Сигналы не являются асинхронными. Когда сигнал отправляется, он немедленно выполняет каждую из подключенных функций последовательно.
Подключение к сигналам
Используйте сигнальный connect
метод для подключения функции к сигналу. Когда сигнал отправляется, каждая связанная функция вызывается с отправителем и любыми иными аргументами, которые предоставляет сигнал.
from flask import template_rendered
def log_template(sender, template, context, **kwargs):
sender.logger.info(
'Rendered template %(template)r with context %(context)r.',
template=template, context=context
)
template_rendered.connect(log_template)
См. Документацию по встроенным сигналам для получения информации о том, какие аргументы они предоставляют. Полезный шаблон - это добавить аргумент **kwargs
чтобы поймать любые неожиданные аргументы.
Пользовательские сигналы
Если вы хотите создавать и отправлять сигналы в своем собственном коде (например, если вы пишете расширение), создайте новый экземпляр Signal
и send
вызов, когда подписчики должны быть уведомлены. Сигналы создаются с использованием Namespace
.
from flask import current_app
from flask.signals import Namespace
namespace = Namespace()
message_sent = namespace.signal('mail_sent')
def message_response(recipient, body):
...
message_sent.send(
current_app._get_current_object(),
recipient=recipient,
body=body
)
@message_sent.connect
def log_message(app, recipient, body):
...
Предпочитайте использовать поддержку сигнала Flask с использованием Blinker напрямую. Он обертывает библиотеку, поэтому сигналы остаются необязательными, если разработчики, использующие расширение, не захотели установить Blinker.