PRO

Что такое signals в Django? Когда их использовать?

Signals в Django позволяют запускать обработчик при определённом событии, например до или после сохранения либо удаления модели. Их полезно применять для слабо связанных побочных действий, но основную бизнес-логику обычно лучше оставлять в явных сервисах, методах или use cases.
Подробный ответ

Что такое signals

Signals — это механизм событий в Django. Один участок кода отправляет сигнал, а другой, заранее подключённый обработчик, реагирует на него. Часто используют встроенные сигналы моделей: pre_save, post_save, pre_delete и post_delete.

Пример обработчика

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import User, Profile


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

Где подключать signals

Обычно обработчики размещают в файле signals.py приложения и импортируют их в методе ready() класса конфигурации приложения. Это гарантирует регистрацию обработчиков при старте Django.

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'

    def ready(self):
        import users.signals

Когда использовать

Signals подходят для вторичных реакций: создания профиля после регистрации пользователя, очистки кэша, аудита или отправки фоновой задачи. Если действие критично для основного сценария, его лучше вызвать явно, чтобы порядок выполнения и зависимости были понятны из кода.

Как ответить на собеседовании

Signals позволяют реагировать на события Django, например на сохранение модели. Я использую их для слабо связанных побочных действий, но не прячу в signals критичную бизнес-логику, потому что её сложнее отслеживать и тестировать.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге