signals in django 3.1 code example
Example 1: django builtin signals
django post_save signals
Let’s have a look on the post_save built-in signal. Its code lives in the django.db.models.signals module. This particular signal fires right after a model finish executing its save method.
from django.contrib.auth.models import User
from django.db.models.signals import post_save
def save_profile(sender, instance, **kwargs):
instance.profile.save()
post_save.connect(save_profile, sender=User)
Another way to register a signal, is by using the @receiver decorator:
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
Example 2: django builtin signals
django built-in signals
Django's built-in Signals:
Django provides a set of built-in signals that let user code get notified by Django itself of certain actions. These include some useful notifications:
django.db.models.signals.pre_save & django.db.models.signals.post_save : Sent before or after a model's save() method is called
django.db.models.signals.pre_delete & django.db.models.signals.post_delete : Sent before or after a model's delete() method or queryset's delete() method is called
django.db.models.signals.m2m_changed : Sent when a ManyToManyField on a model is changed
django.core.signals.request_started & django.core.signals.request_finished : Sent when Django starts or finishes an HTTP request