Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:djangoadv [2014/06/02 16:58] alfred [Signals in Django] |
fw:djangoadv [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 66: | Línea 66: | ||
| * ''django.core.signals.request_started'' & ''django.core.signals.request_finished'', sent when Django starts or finishes an HTTP request. | * ''django.core.signals.request_started'' & ''django.core.signals.request_finished'', sent when Django starts or finishes an HTTP request. | ||
| - | There are [[https://docs.djangoproject.com/en/dev/ref/signals/|ohters]] like pre_init, class_prepared, pre_migrate, pre_syncdb, got_request_exception, connection_created... | + | There are [[https://docs.djangoproject.com/en/dev/ref/signals/|ohters]] like ''pre_init'', ''class_prepared'', ''pre_migrate'', ''pre_syncdb'', ''got_request_exception'', ''connection_created''... |
| ==== Connecting signals ==== | ==== Connecting signals ==== | ||
| Línea 103: | Línea 103: | ||
| ==== Defining and sending signals ==== | ==== Defining and sending signals ==== | ||
| + | Signals are ''django.dispatch.Signal([providing_args=list])'' instances. ''providing_args'' is a list of the names of arguments the signal will provide to listeners. To declare a ''pizza_done'' signal which provides receivers with toppics and size arguments: | ||
| + | <code python> | ||
| + | import django.dispatch | ||
| + | pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"]) | ||
| + | </code> | ||
| + | To send a signal, call either ''Signal.send()'' or ''Signal.send_robust()''. Both return a list of tuple pairs ''[(receiver, response), ... ]''. They differ in how exceptions raised by receiver functions. ''send()'' does not catch any exceptions raised by receivers; it simply allows errors to propagate. Whereas ''send_robust()'' catches all errors derived from Python’s Exception class, and ensures all receivers are notified of the signal. | ||
| + | <code python> | ||
| + | class PizzaStore(object): | ||
| + | ... | ||
| + | def send_pizza(self, toppings, size): | ||
| + | pizza_done.send(sender=self.__class__, toppings=toppings, size=size) | ||
| + | </code> | ||
| + | To disconnect a receiver from a signal, call ''Signal.disconnect()''. | ||