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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow