Django - сигналы. Простые примеры для начала

Я новичок в django, и я не могу понять, как работать с сигналами django. Может ли кто-нибудь объяснить "сигналы джанго" с помощью простых примеров?

Спасибо заранее.

Ответ 1

Вы можете найти очень хорошее содержание о сигналах django через Интернет, сделав очень маленькие исследования.

Здесь я расскажу вам очень кратко о сигналах Django.
Что такое сигналы Django?
Сигналы позволяют некоторым отправителям уведомить набор приемников о том, что некоторые действия были выполнены

Действия:

метод сохранения модели() вызывается.
django.db.models.signals.pre_save | post_save

Вызывается метод

model delete().
django.db.models.signals.pre_delete | post_delete

Изменено ManyToManyField на модели.
django.db.models.signals.m2m_changed

Django запускает или завершает HTTP-запрос.
django.core.signals.request_started | request_finished

Все сигналы представляют собой экземпляры django.dispatch.Signal.

очень простой пример:

models.py

from django.db import models
from django.db.models import signals

def create_customer(sender, instance, created, **kwargs):
    print "Save is called"

class Customer(models.Model):
    name = models.CharField(max_length=16)
    description = models.CharField(max_length=32)

signals.post_save.connect(create_customer, sender=Customer)

Shell

In [1]: obj = Customer(name='foo', description='foo in detail')

In [2]: obj.save()
Save is called

Ответ 2

Помимо объяснения, данного Prashant, вы также можете использовать декоратор приемника, присутствующий в модуле django.dispatch.

например.

from django.db import models
from django.db.models import signals
from django.dispatch import receiver

class Customer(models.Model):
    name = models.CharField(max_length=16)
    description = models.CharField(max_length=32)

@receiver(signals.pre_save, sender=Customer)
def create_customer(sender, instance, created, **kwargs):
    print "customer created"

Для получения дополнительной информации см. ссылку ниже: - https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html