Что такое signals в Django? Когда их использовать?
Подробный ответ
Что такое 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 критичную бизнес-логику, потому что её сложнее отслеживать и тестировать.
Оцени свой прогресс