What Are Django Signals?
If you’ve ever wished you could whisper to your Django app, “Hey, whenever a user signs up, go create their profile automatically,” then congratulations—you’ve just discovered the emotional essence of Django Signals.
They’re basically Django’s way of saying:
“Something happened. Do you want to do something about it?”
That’s it. No mysticism. No dark magic. Just events and reactions.
👉 The official docs explain it here (very robotically, IMO):
External link: https://docs.djangoproject.com/en/dev/topics/signals/

Basic Example of Django Signals:
Here’s a real example from a beginner-friendly app I worked on.
Let’s say we want to create a UserProfile whenever someone registers.
# signals.py
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import UserProfile
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
Django Signals did all the heavy lifting.
Just don’t forget to import signals somewhere (usually in apps.py).
(Trust me, you will forget once and wonder why nothing works. We’ve all been there.)
When to Use Django Signals (and When to Run Away)
I’ll give it to you straight.
Signals are incredible, but they can also be the reason future-you curses present-you.
Use Django Signals when:
-
You want clean separation of logic
-
Something should happen automatically
-
You want event-driven behavior
-
You want to reduce repetitive code
❌ Avoid Django Signals when:
-
You want predictable, easy-to-trace behavior
-
You care about performance
-
You’re doing something mission-critical
-
You’re working in a huge team without strict documentation
One of my mentors once said:
“Signals are like fire. Beautiful, powerful, and dangerous when left unmarked.”

Understanding Built-in Django Signals (Django Signals + Memory Lane)
Django gives you several built-in signals. Here are some you’ll actually use:
-
pre_save – Before saving
-
post_save – After saving
-
pre_delete – Before deletion
-
post_delete – After deletion
-
m2m_changed – When many-to-many relations change
-
request_started, request_finished – For request lifecycle stuff
A Real Example of pre_save
One time in my “trello type soul” project, I wanted to automatically generate slugs for boards.
@receiver(pre_save, sender=Board)
def board_slug_maker(sender, instance, **kwargs):
if not instance.slug:
instance.slug = slugify(instance.title)
Custom Django Signals
Sometimes you need your own signals.
Like when a user finishes a board in my trello type soul app, I wanted to:
-
Send them a “You’re awesome” notification
-
Create a completion log
-
Update their productivity score
So I made a custom signal:
from django.dispatch import Signal board_completed = Signal()
And fired it like this:
board_completed.send(sender=Board, instance=board)
Then connected it:
@receiver(board_completed)
def celebrate_board_completion(sender, instance, **kwargs):
print("🎉 Board completed:", instance.title)
Django Signals Compared to Other Tools
| Feature | Signals | Middleware | Celery |
|---|---|---|---|
| Event triggered | Yes | No | No |
| Background tasks | Somewhat | No | Yes |
| Good for separation of concerns | Yes | Sometimes | Yes |
| Overkill for small tasks | No | Yes | Yes |
How Django Signals Elevate a trello type soul App

Here are some great use cases for combining Django Signals + a trello type soul workflow:
-
Auto-creating task lists
-
Logging user actions
-
Sending notifications
-
Cleaning up unassigned cards
-
Generating history timelines
-
Auto-assigning colors or labels
-
Building “smart boards” that adapt to user behavior
Final Words:
If you take anything away from this guide, let it be this:
-
Django Signals are incredible tools.
-
They make your app event-driven, cleaner, and more automated.
-
They help you build “trello type soul” experiences with ease.
-
But they should be used responsibly.
-
And with documentation. Always documentation.
Whether you’re creating user profiles, generating slugs, logging actions, or building soulful productivity apps, Django Signals will be one of those features you secretly fall in love with.
And trust me—you will.
If you want to dive deeper, kaashiv Infotech Offers, Django, Python Course, Full Stack Python Course & More, Visit Our Website www.kaashivinfotech.com.
