Suche…


Bemerkungen

Die Flasche unterstützt Signale, die Blinker verwenden . Signalunterstützung ist optional; Sie werden nur aktiviert, wenn Blinker installiert ist.

pip install blinker

http://flask.pocoo.org/docs/dev/signals/


Signale sind nicht asynchron. Wenn ein Signal gesendet wird, führt es sofort jede der verbundenen Funktionen nacheinander aus.

Anschließen an Signale

Verwenden Sie die connect eines Signals, um eine Funktion mit einem Signal zu verbinden. Wenn ein Signal gesendet wird, wird jede verbundene Funktion mit dem Sender und den benannten Argumenten des Signals aufgerufen.

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)

Informationen zu den von ihnen bereitgestellten Argumenten finden Sie in der Dokumentation zu den integrierten Signalen . Ein nützliches Muster ist das Hinzufügen eines **kwargs Arguments, um unerwartete Argumente **kwargs .

Kundenspezifische Signale

Wenn Sie Signale in Ihrem eigenen Code erstellen und senden möchten (z. B. wenn Sie eine Nebenstelle schreiben), erstellen Sie eine neue Signal und rufen Sie send wenn die Abonnenten benachrichtigt werden sollen. Signale werden mit einem 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):
    ...

Verwenden Sie lieber die Signalunterstützung von Flask als die direkte Verwendung von Blinker. Die Bibliothek wird so umbrochen, dass Signale optional bleiben, wenn Entwickler, die Ihre Erweiterung verwenden, Blinker nicht installiert haben.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow