Урок 45. Сигналы в Django. Настройка email

📁 Блок: Auth / Django ⏱️ Время изучения: ~60 мин 🎯 Сложность: Средняя
#signals #post_save #pre_save #receiver #send_mail #EMAIL_BACKEND #apps.py

⚡ Кратко: сигналы и email в Django

Сигналы Django — механизм «издатель–подписчик» внутри приложения. Когда происходит событие (сохранение модели, удаление), Django автоматически вызывает все зарегистрированные обработчики — без изменения кода модели.

  • @receiver(post_save, sender=Model) — зарегистрировать обработчик через декоратор
  • signal.connect(handler, sender=Model) — альтернативная регистрация без декоратора
  • AppConfig.ready() — правильное место для импорта signals.py
  • EMAIL_BACKEND = '...console...' — вывод писем в консоль при разработке
  • send_mail(subject, body, from, [to]) — отправить email из обработчика сигнала

Что запомнить: сигналы должны регистрироваться в AppConfig.ready(), иначе обработчики не будут подключены при старте Django.

Частая ошибка: Импортировать signals.py напрямую в models.py — вызывает циклические импорты. Правильное место — apps.py → ready().

📖 О чём этот урок

Урок 45 посвящён двум взаимосвязанным темам. Первая — сигналы Django: механизм, позволяющий различным частям приложения реагировать на события (создание, изменение, удаление объектов) без прямого связывания кода. Вторая — отправка email через Django: настройка EMAIL_BACKEND для разработки (ConsoleBackend) и боевого окружения (SMTP), а также типичный кейс — отправка письма при создании объекта через сигнал.

Что изучим

  • Что такое сигналы Django и зачем они нужны (декомпозиция кода)
  • Встроенные сигналы: pre_save, post_save, pre_delete, post_delete, m2m_changed
  • Параметры каждого сигнала: sender, instance, created, using и др.
  • Регистрация обработчиков: @receiver и .connect()
  • Правильная регистрация сигналов в apps.py → ready()
  • Настройка EMAIL_BACKEND: ConsoleBackend и SmtpBackend
  • Функция send_mail() — параметры и использование в обработчике
  • Кейс: уведомление администратора по email при создании объекта

📚 Что повторить перед изучением

🎯 Что изучать дальше