Flask
Les signaux
Recherche…
Remarques
Flask prend en charge les signaux en utilisant Blinker . Le support du signal est facultatif. ils ne seront activés que si Blinker est installé.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
Les signaux ne sont pas asynchrones. Lorsqu'un signal est envoyé, il exécute immédiatement chacune des fonctions connectées séquentiellement.
Connexion aux signaux
Utilisation d'un signal de connect
méthode pour connecter une fonction à un signal. Lorsqu'un signal est envoyé, chaque fonction connectée est appelée avec l'expéditeur et tout argument nommé fourni par le signal.
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)
Consultez la documentation sur les signaux intégrés pour obtenir des informations sur les arguments fournis. Un modèle utile consiste à ajouter un argument **kwargs
pour intercepter des arguments inattendus.
Signaux personnalisés
Si vous souhaitez créer et envoyer des signaux dans votre propre code (par exemple, si vous écrivez une extension), créez une nouvelle instance de Signal
et send
appel lorsque les abonnés doivent être avertis. Les signaux sont créés à l'aide d'un 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):
...
Préférez utiliser le support de signal de Flask avec Blinker directement. Il encapsule la bibliothèque pour que les signaux restent facultatifs si les développeurs utilisant votre extension n'ont pas choisi d'installer Blinker.