Flask
Sygnały
Szukaj…
Uwagi
Kolba obsługuje sygnały za pomocą migacza . Obsługa sygnału jest opcjonalna; zostaną włączone tylko wtedy, gdy zainstalowany jest Blinker.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
Sygnały nie są asynchroniczne. Po wysłaniu sygnału natychmiast wykonuje kolejno każdą z połączonych funkcji.
Podłączanie do sygnałów
Użyj metody connect
sygnału, aby połączyć funkcję z sygnałem. Gdy sygnał jest wysyłany, każda połączona funkcja jest wywoływana z nadawcą i wszelkimi nazwanymi argumentami dostarczanymi przez sygnał.
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)
Zobacz dokumentację na temat wbudowanych sygnałów, aby uzyskać informacje o tym, jakie argumenty przekazują. Przydatnym wzorem jest dodanie argumentu **kwargs
celu przechwycenia nieoczekiwanych argumentów.
Niestandardowe sygnały
Jeśli chcesz tworzyć i wysyłać sygnały we własnym kodzie (na przykład, jeśli piszesz rozszerzenie), utwórz nową instancję Signal
i send
wywołanie, gdy subskrybenci powinni zostać powiadomieni. Sygnały są tworzone za pomocą 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):
...
Wolę korzystać z obsługi sygnału Flask'a niż bezpośrednio używać Blinkera. Opakowuje bibliotekę, dzięki czemu sygnały pozostają opcjonalne, jeśli programiści używający Twojego rozszerzenia nie zdecydowali się zainstalować Blinkera.