장고 신호
우선 django 신호가 필요한 이유는 무엇입니까? django 신호는 백엔드에서 이벤트 기반 기능을 개발하려고 할 때 유용할 수 있습니다.
django에는 두 개의 엔터티가 있습니다. 하나는 발신자이고 다른 하나는 수신자입니다. 발신자는 특정 이벤트에 대한 신호를 보내고 해당 이벤트를 수신하는 모든 수신자는 신호로 알림을 받고 특정 종류의 작업을 수행합니다.
Django 모델 기반 신호
django의 내장 신호를 사용하여 몇 가지 예를 볼 수 있습니다.
django의 models.py에서 몇 가지 모델을 정의해 봅시다.
# models.py
from django.db import models
from django.contrib.auth.models import User
import datetime
# Create your models here.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_url = models.URLField()
mobile = models.CharField(max_length=20, default='999-999-9999')
funds = models.FloatField(default=2000)
def __str__(self):
return "[PROFILE]:" + self.user.username
class Log(models.Model):
timestamp = models.DateTimeField(default=datetime.datetime.now)
message = models.TextField()
def __str__(self):
return self.message
여기서 우리는 모델에 의해 내장된 사용자 모델을 확장하는 두 가지 모델 프로필을 정의했습니다. OneToOneField와 다른 하나는 단순히 데이터베이스에 로그 메시지를 저장하는 데 사용되는 로그 모델입니다.
이제 특정 모델이 데이터베이스에 저장된 후 트리거되는 post_save 신호를 사용하는 리버버를 정의할 수 있습니다.
# models.py
# .... models defined above
from django.db.models.signals import post_save
from django.dispatch import receiver
# triggred when User object is created
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(
user=instance
)
# triggred when User object is saved
@receiver(post_save, sender=User)
def log_user_saved(sender, instance, **kwargs):
Log.objects.create(
message=f"user {instance.username} is saved"
)
# triggred when Profile object is saved
@receiver(post_save, sender=Profile)
def log_profile_saved(sender, instance, **kwargs):
Log.objects.create(
message=f"profile {instance} is saved"
)
위에서 볼 수 있듯이 3개의 수신기 함수를 생성하여 각각을 볼 수 있습니다.
create_profile 이 수신기는 User 모델의 post_save 신호가 생성될 때 트리거됩니다. 즉, 사용자 모델이 데이터베이스에 저장된 후 Post_save 신호가 User 모델에 의해 생성되고 create_profile 수신기가 트리거됩니다.
create_profile에서 우리는 django admin으로 이동하여 사용자를 생성하여 확인할 수 있는 사용자에 대한 프로필을 생성합니다.
사용자 생성
사용자 저장됨
프로필 생성됨
위의 이미지에서 볼 수 있듯이 프로필은 post_save 신호의 도움으로 사용자를 위해 자동으로 생성됩니다.
마찬가지로 로그 모델로 이동하면 각 신호에 대해 생성된 로그를 볼 수 있습니다.
위의 이미지에서 사용자 및 프로필에 대한 신호가 트리거될 때 로그 객체가 생성되는 것을 볼 수 있습니다.
post_save와 유사하게 pre_save, pre_delete, post_delete, pre_init와 같은 신호가 있습니다.
post_init, m2m_changed
다양한 신호에 대한 수신기 기능
pre_init
receiver_function(sender, *args, **kwargs)
post_init
receiver_function(sender, instance)
미리 저장
receiver_function(sender, instance, raw, using, update_fields)
post_save
receiver_function(sender, instance, created, raw, using, update_fields)
사전 삭제
receiver_function(sender, instance, using)
post_delete
receiver_function(sender, instance, using)
m2m_변경됨
receiver_function(sender, instance, action, reverse, model, pk_set, using)
Reference
이 문제에 관하여(장고 신호), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rohit20001221/django-signals-3ldn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)