Flask
signaler
Sök…
Anmärkningar
Flaskan stöder signaler med Blinker . Signalstöd är valfritt; de kommer bara att aktiveras om Blinker är installerat.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
Signalerna är inte asynkrona. När en signal skickas kör den omedelbart var och en av de anslutna funktionerna i följd.
Ansluter till signaler
Använd en signal s connect
metod för att ansluta en funktion på en signal. När en signal skickas, anropas varje ansluten funktion med avsändaren och eventuella namngivna argument som signalen tillhandahåller.
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)
Se dokumentationen om inbyggda signaler för information om vilka argument de ger. Ett användbart mönster är att lägga till ett **kwargs
argument för att fånga eventuella oväntade argument.
Anpassade signaler
Om du vill skapa och skicka signaler i din egen kod (till exempel om du skriver ett tillägg), skapa en ny Signal
och ring send
när abonnenterna ska meddelas. Signaler skapas med ett 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):
...
Föredrar att använda Flasks signalstöd framför att använda Blinker direkt. Det lindar biblioteket så att signaler förblir valfria om utvecklare som använder din anknytning inte har valt att installera Blinker.