Урок 45. Сигналы в Django. Настройка email
⚡ Кратко: сигналы и 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 при создании объекта
📚 Что повторить перед изучением
- ← Урок 44: JWT-аутентификация — автоматическое использование токенов
- Django модели: ForeignKey, ManyToManyField, Model.save()
- AppConfig: что такое
apps.py, как Django регистрирует приложения - Python декораторы: синтаксис
@decorator, передача аргументов
🎯 Что изучать дальше
- → Урок 46: Summary session 8 — итоговое занятие блока Auth
- Celery + Django: асинхронная отправка email через задачи
- django-post-office — продвинутое управление email-очередью
- Custom signals: создание собственных сигналов через
django.dispatch.Signal