특정 이벤트가 발생할 때 다른 부분에서 알림을 받아 추가 작업을 수행할 수 있도록 하는 기능
pre_save: 모델의 인스턴스가 저장되기 전에 호출post_save: 모델의 인스턴스가 저장된 후에 호출pre_delete: 모델의 인스턴스가 삭제되기 전에 호출post_delete: 모델의 인스턴스가 삭제된 후에 호출m2m_changed: 다대다 관계가 변경될 때 호출request_started: HTTP 요청이 시작될 때 호출request_finished: HTTP 요청이 끝났을 때 호출from django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import MyModel
# 수신기 함수 정의
@receiver(post_save, sender=MyModel)
def my_model_post_save(sender, instance, created, **kwargs):
if created:
print(f"{instance}이(가) 생성되었습니다!")
else:
print(f"{instance}이(가) 수정되었습니다!")
수신기 함수는 시그널이 발송될 때 호출되는 함수
sender / **kwargsfrom django.db.models.signals import post_save
from django.dispatch import receiver
from myapp.models import MyModel
# 시그널과 수신기 연결
@receiver(post_save, sender=MyModel)
def my_model_post_save(sender, instance, created, **kwargs):
# 저장된 후 처리할 로직
if created:
print(f"새 인스턴스 {instance}가 생성되었습니다!")
@receiver 데코레이터를 사용할 수 있음signals.connect() 메서드를 사용해 시그널과 수신기를 명시적으로 연결도 가능내장 시그널 외에도 사용자 정의 시그널을 만들어 특정 이벤트가 발생했을 때 알림을 발송할 수 있다.
Signal 클래스를 사용하여 사용자 정의 시그널을 정의 가능from django.dispatch import Signal
# 사용자 정의 시그널 정의
my_custom_signal = Signal(providing_args=["arg1", "arg2"])
from django.dispatch import receiver
@receiver(my_custom_signal)
def handle_my_custom_signal(sender, **kwargs):
print("사용자 정의 시그널이 호출되었습니다!")
print(f"인자: {kwargs}")
# 시그널 발송
my_custom_signal.send(sender=None, arg1="Hello", arg2="World")
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from myapp.models import Profile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
from django.db.models.signals import pre_delete, post_delete
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(pre_delete, sender=MyModel)
def before_model_delete(sender, instance, **kwargs):
print(f"{instance}이(가) 삭제되기 전입니다.")
@receiver(post_delete, sender=MyModel)
def after_model_delete(sender, instance, **kwargs):
print(f"{instance}이(가) 삭제된 후입니다.")


refresh: 갱신용 / access: access시에 사용가능한 정보

