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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow