Django Signals

Сигналыarrow-up-right — очень похожая реализация паттерна Pub-Sub в Django для общения между компонентами одного приложения.

В Django есть встроенные сигналы, на которые можно подписываться (например, изменение каких-нибудь настроек), а можно создавать свои сигналы

Пример встроенного сигнала:

from django.core.signals import setting_changed

Пример создания своего сигнала:

from django.dispatch import Signal

my_signal = Signal()

Подписаться на сигнал (стать receiver'ом в терминах Django):

from django.core.signals import setting_changed
def my_callback(sender, **kwargs):
    print("Request finished!")

setting_changed.connect(my_callback)

или через декоратор receiver():

from django.core.signals import setting_changed
from django.dispatch import receiver


@receiver(setting_changed)
def my_callback(sender, **kwargs):
    print("Setting changed!")

Отправить сигнал:

Полный пример

Например, мы хотим подписаться на событие сохранения нашей модели Django:

Last updated