장고 신호에 대한 빠른 소개

Django 신호는 무엇입니까?



Django 신호는 프로젝트의 개별 애플리케이션이 통신하는 데 도움이 됩니다. 즉, 특정 이벤트가 발생하면 다른 이벤트의 발생을 트리거합니다.

신호를 사용하는 경우...
Django 신호는 신호등의 초록불과 같습니다. 초록불이 켜지면 자동차의 움직임이 시작됩니다.

Django 신호의 일반적인 사용 사례는 프로필 모델과 일대일 관계가 있는 사용자 모델이 있는 경우입니다. 여기서 우리는 사용자 개체가 생성될 때마다 프로필 인스턴스를 생성하거나 사용자 개체가 업데이트될 때 기존 프로필 인스턴스를 업데이트하는 것을 목표로 합니다. 이것은 신호가 구출되는 곳입니다. 신호는 .save() 메서드가 호출된 후 사용자 모델의 사후 이벤트를 수신합니다. .save() 메서드가 호출되면 post_save 신호가 전송되어 프로필 인스턴스를 생성하거나 기존 인스턴스를 업데이트하는 수신기 함수를 트리거합니다.

코드를 작성해 봅시다...

계속 진행하기 전에 신호에 보낸 사람과 받는 사람이 있음을 알아차렸습니다...
발신자는 Python 객체이거나 모든 발신자로부터 신호를 수신하는 None이어야 합니다.
수신자는 함수 또는 인스턴스 메서드여야 합니다.

users/models.py
from django.db import models

class User(models.Model):
   name = models.CharField(max_length = 200)
   email = models.EmailField()

#another application models   
profile/models.py
from django.db import models

class Profile(models.Model):
   user= models.OnetoOneField(User, on_delete = models.CASCADE)
   email = models.EmailField()


모델이 모두 설정되었으므로 Django 내장 신호, 특히 post_save 신호인 모델 신호를 사용하겠습니다.

profile/signals.py
from .models import Profile
from base.models import User
from django.dispatch import receiver
from django.db.models.signals import post_save

@receiver(post_save, sender = User)
def create_profile(sender, instance, created, *args, **kwargs):
    if created:
        Profile.objects.create(user  = instance)

#post_save.connect(create_profile, sender = User)


발신자와 수신자를 연결하려면 @receiver 데코레이터 또는 Signal 인스턴스의 .connect() 메서드를 사용할 수 있습니다.

그래서 여기서 무슨 일이 일어날까요 ...
사용자 개체가 저장되면 사용자 필드가 생성된 사용자 인스턴스로 채워지는 프로필 인스턴스가 생성됩니다.

마지막 비트는 signal.py 파일의 구성입니다...

apps.py 내에서 signal.py 파일을 가져올 ready() 함수를 생성합니다.

profile/apps.py
from django.apps import AppConfig

class ProfileConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "profile"

    def ready(self):
        import profile.signals


게다가,
INSTALLED_APPS 아래의 settings.py에서 다음과 같이 앱을 등록해야 합니다"profile.apps.ProfileConfig". 앱 이름만 표시하여 등록하는 경우(예: "profile") 패키지의 __init__.py 파일에 다음 코드를 작성해야 합니다. .py 파일이 있습니다.

profile/__init__.py
default_app_config = 'profile.apps.ProfileConfig'


내장 Django 신호에 대해 자세히 알아보려면 Django docs을 확인하십시오.

윌리엄 제임스의 오늘의 인용문

If you can change your mind, you can change your life.



읽어주셔서 감사합니다😄

좋은 웹페이지 즐겨찾기