Flask
Signale
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.