Этот вопрос проверяет понимание механизма сигналов в Django и умение использовать их для реакции на события в системе.
Django signals позволяют выполнять определённый код автоматически, когда в системе происходит какое-то событие — например, создаётся объект или обновляется модель. Они реализуют принцип publish/subscribe: один компонент отправляет сигнал, другой слушает и выполняет действие. Это полезно, когда нужно отделить бизнес-логику от места, где событие возникает, и избежать жёсткой связности между компонентами.
Сигналы в Django — это механизм обратного вызова, позволяющий различным частям приложения реагировать на события, возникающие в других частях системы, без прямой связи между ними.
Вместо того чтобы вставлять дополнительный код в метод save(), можно вынести его в обработчик сигнала.
Примеры сигналов:
pre_save / post_save
pre_delete / post_delete
m2m_changed
request_started / request_finished
Сигналы помогают избежать режима “God model”, когда одна модель отвечает за слишком много.
Допустим, мы хотим отправить уведомление после создания нового пользователя.
python
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
@receiver(post_save, sender=User)
def send_welcome_email(sender, instance, created, **kwargs):
if created:
print(f"Sending welcome email to {instance.username}")
python
# apps.py
def ready(self):
import myapp.signals
автоматическая генерация профиля после создания пользователя
логирование событий
обновление зависимых моделей
сложная бизнес-логика
процессы, требующие строгой последовательности
действия, которые должны быть явно явными (лучше — сервисы)
Django signals — удобный механизм для реакции на события и уменьшения связности. Но злоупотреблять ими нельзя, иначе логика станет неявной.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
Python
Django
Ключевые слова
Подпишись на Python Developer в телеграм