|Version 5 (modified by Tyson Tate <tyson@…>, 9 years ago) (diff)|
What Are Signals?
Signals allow you to make Django call custom methods after common actions using a dispatcher. Beyond that, I really don't know much else. Please help expand this documentation, if you can.
The author of Zyons talks about signals a bit here.
Django has the following build in signalers:
All the above are related to classes in your models.py files.
You can send custom signals from the dispatcher, as well. In the following example from this intro to signals, a signal called "object_viewed" is sent whenever the following bit is called:
dispatcher.send(signal=signals.object_viewed, request=request, object=object)
You'll have to instantiate the signal in a file called "signals.py" in your app's folder:
And then, in any file in which you use that signal (typically, models.py and views.py), you'll need to import your signals file:
from project.app import signals
The following is taken from Zyons, the only place I've seen signals used so far. Unless I'm completely incorrect, the following code has the dispatcher call "increment_tag_summary" before a TagUserObject object is saved, and "decrement_tag_summary" after a TagUserObject object is deleted.
from django.db.models import signals from django.dispatch import dispatcher [...] def increment_tag_summary(sender, instance, signal, *args, **kwargs): [...] def decrement_tag_summary(sender, instance, signal, *args, **kwargs): [...] dispatcher.connect( increment_tag_summary , signal=signals.pre_save, sender=TagUserObject ) dispatcher.connect( decrement_tag_summary , signal=signals.post_delete, sender=TagUserObject )