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 подскажет развёрнутый ответ в реальном времени.