Mediumdjangosignals
Что такое Django signals?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Django signals — observer pattern, уведомления о событиях. Синхронны — выполняются в том же потоке, в той же транзакции (для db-сигналов).
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def user_created(sender, instance, created, **kwargs):
if created:
send_email(instance)
# Custom signal
from django.dispatch import Signal
user_registered = Signal()
user_registered.send(sender=..., user=...)- Встроенные:
pre_save,post_save,pre_delete,post_delete,m2m_changed; sender— конкретный класс (или любой);disconnectдля отписки;- Ограничения: implicit coupling (сложно отследить), порядок handlers не гарантирован;
- Best practice: предпочитать явный вызов methods; signals для reusable apps;
- celery task в signal — распространённая ошибка (запуск в транзакции).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.