Поиск…


замечания

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.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow