🎸 Django Beginner

What are Django signals?

Answer

Django signals are a lightweight notification system allowing certain senders to notify a set of receivers when specific actions occur — decoupling components. Built-in signals: pre_save, post_save — before/after model save; pre_delete, post_delete — before/after model delete; m2m_changed — ManyToMany changes; request_started, request_finished — HTTP request lifecycle; user_logged_in, user_logged_out, user_login_failed. Connecting a receiver: from django.db.models.signals import post_save from django.dispatch import receiver from django.contrib.auth.models import User @receiver(post_save, sender=User) def create_profile(sender, instance, created, **kwargs): if created: Profile.objects.create(user=instance) @receiver(post_save, sender=User) def send_welcome_email(sender, instance, created, **kwargs): if created: send_email.delay(instance.email, "Welcome!") # async. Register in AppConfig.ready(): class MyAppConfig(AppConfig): def ready(self): import myapp.signals # import to register. Custom signals: from django.dispatch import Signal order_placed = Signal() # Emit: order_placed.send(sender=Order, order=order_instance) # Receive: @receiver(order_placed) def handle_order(sender, order, **kwargs): send_confirmation_email(order). Caution: signals execute synchronously in the same transaction — keep handlers fast; use Celery for async work. Avoid complex signal chains — they're hard to trace. Prefer direct method calls when the relationship is clear.