Как работают сигналы в Django
Python
Middle
Без компании
Как работают сигналы в Django
Ответы
Сигналы в Django — это механизм для отправки и получения уведомлений при определенных событиях в приложении. Они реализуют паттерн "наблюдатель", позволяя разным частям кода реагировать на изменения, не будучи жестко связанными.
Основные компоненты:
- **Отправитель (sender)** — модель или другой объект, генерирующий сигнал
- **Сигнал** — сам объект сигнала (например, `post_save`)
- **Получатель (receiver)** — функция, которая обрабатывает сигнал
Пример использования:
```
from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(post_save, sender=MyModel)
def my_handler(sender, instance, created, **kwargs):
if created:
print(f"Создан новый объект {instance}")
```
Основные встроенные сигналы:
- `pre_save`/`post_save` — до/после сохранения модели
- `pre_delete`/`post_delete` — до/после удаления
- `m2m_changed` — при изменении ManyToMany поля
Сигналы помогают сохранять слабую связность кода, но могут усложнить отладку. Рекомендуется документировать их использование.