Flask
signalen
Zoeken…
Opmerkingen
Kolf ondersteunt signalen met behulp van Blinker . Signaalondersteuning is optioneel; ze worden alleen ingeschakeld als Blinker is geïnstalleerd.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
Signalen zijn niet asynchroon. Wanneer een signaal wordt verzonden, voert het onmiddellijk elk van de verbonden functies sequentieel uit.
Verbinden met signalen
Gebruik de connect
een signaal om een functie aan een signaal te verbinden. Wanneer een signaal wordt verzonden, wordt elke verbonden functie opgeroepen met de afzender en alle benoemde argumenten die het signaal geeft.
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)
Raadpleeg de documentatie over ingebouwde signalen voor informatie over welke argumenten ze bieden. Een handig patroon is het toevoegen van een **kwargs
argument om onverwachte argumenten op te vangen.
Aangepaste signalen
Als u signalen in uw eigen code wilt maken en verzenden (bijvoorbeeld als u een extensie schrijft), maakt u een nieuwe Signal
en roept u send
wanneer de abonnees op de hoogte moeten worden gesteld. Signalen worden gemaakt met behulp van een 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):
...
Gebruik liever de signaalondersteuning van Flask boven het gebruik van Blinker rechtstreeks. Het verpakt de bibliotheek zodat signalen optioneel blijven als ontwikkelaars die uw extensie gebruiken niet hebben gekozen om Blinker te installeren.