Django Signals
Π‘ΠΈΠ³Π½Π°Π»Ρ β ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° 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!")
ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΈΠ³Π½Π°Π»:
my_signal.send(sender=self.__class__, arg1=1, arg2="test", ...)
ΠΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π°ΡΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Django:
from django.db.models.signals import post_init, post_save
from django.dispatch import receiver
from my_model import MyModel
@receiver(post_save, sender=MyModel)
def my_receiver(sender, instance, created, **kwargs):
# ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ MyModel, ΡΠΎ ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠ·ΠΎΠ²Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ
# ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΠΎΠ»Ρ instance (ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΈΠΏΠ° MyModel), ΡΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ
...
Last updated