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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow