Flask
segnali
Ricerca…
Osservazioni
Flask supporta i segnali usando Blinker . Il supporto del segnale è facoltativo; saranno abilitati solo se Blinker è installato.
pip install blinker
http://flask.pocoo.org/docs/dev/signals/
I segnali non sono asincroni. Quando viene inviato un segnale, esegue immediatamente ciascuna delle funzioni collegate in sequenza.
Collegamento ai segnali
Utilizzare di un segnale connect
metodo per collegare una funzione per un segnale. Quando viene inviato un segnale, ciascuna funzione connessa viene chiamata con il mittente e gli eventuali argomenti denominati forniti dal segnale.
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)
Vedere la documentazione sui segnali integrati per informazioni su quali argomenti forniscono. Un pattern utile è l'aggiunta di un argomento **kwargs
per catturare qualsiasi argomento imprevisto.
Segnali personalizzati
Se si desidera creare e inviare segnali nel proprio codice (ad esempio, se si sta scrivendo un'estensione), creare una nuova istanza Signal
e chiamare send
quando gli abbonati devono essere avvisati. I segnali vengono creati utilizzando uno 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):
...
Preferisci usare il supporto del segnale di Flask sull'uso diretto di Blinker. Racchiude la libreria in modo che i segnali rimangano facoltativi se gli sviluppatori che utilizzano la tua estensione non hanno scelto di installare Blinker.