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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow