python / intermediate
Snippet
Django Signals for Model Event Handling
Django signals allow you to decouple your application logic by triggering actions in response to certain events. The post_save signal fires after a model instance is saved, making it perfect for creating related objects or sending notifications. Pre_delete fires before an object is deleted, useful for cleanup operations or cascading deletions.
snippet.py
1
from django.db.models.signals import post_save, pre_delete\nfrom django.dispatch import receiver\nfrom django.core.mail import send_mail\n\nclass UserProfile(models.Model):\n user = models.OneToOneField(User, on_delete=models.CASCADE)\n bio = models.TextField(max_length=500)\n notification_enabled = models.BooleanField(default=True)\n\n@receiver(post_save, sender=User)\ndef create_user_profile(sender, instance, created, **kwargs):\n if created:\n UserProfile.objects.create(user=instance)\n send_mail(\n 'Welcome to Capypad',\n 'Your account has been created.',\n '[email protected]',\n [instance.email]\n )\n\n@receiver(pre_delete, sender=User)\ndef delete_related_profile(sender, instance, **kwargs):\n if hasattr(instance, 'userprofile'):\n instance.userprofile.delete()
django
Breakdown
1
@receiver(post_save, sender=User)
Decorator to register signal handler for User model save events
2
if created:
Check if this is a new instance being created
3
UserProfile.objects.create(user=instance)
Create the related profile automatically
4
send_mail('Welcome...', [instance.email])
Send welcome email to new user
5
@receiver(pre_delete, sender=User)
Signal to handle cleanup before User deletion