예를 들어, 앱이 설정 변경에 대한 알림을 받을 수 있도록 등록할 수 있다.
from django.apps import AppConfig
from django.core.signals import setting_changed
def my_callback(sender, **kwargs):
print("Setting changed!")
class MyAppConfig(AppConfig):
...
def ready(self):
setting_changed.connect(my_callback)
Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)
receiver
sender
weak
True. Django는 기본적으로 신호 핸들러를 약한 참조(weak reference)로 저장한다. weak=False를 전달해야 한다.dispatch_uid
sender와 키워드 인수(**kwargs)를 받아야 한다.예제:
def my_callback(sender, **kwargs):
print("Request finished!")
**kwargs를 통해 추가 인수를 전달할 수 있다. 수동으로 연결하기
from django.core.signals import request_finished
request_finished.connect(my_callback)
데코레이터를 사용하여 연결하기
from django.core.signals import request_finished
from django.dispatch import receiver
@receiver(request_finished)
def my_callback(sender, **kwargs):
print("Request finished!")
사용자 지정 신호는 django.dispatch.Signal 클래스의 인스턴스로 정의된다.
import django.dispatch
pizza_done = django.dispatch.Signal()
Signal.send(sender, **kwargs) 또는 Signal.send_robust(sender, **kwargs)를 사용하여 신호를 전송한다.예제:
class PizzaStore:
def send_pizza(self, toppings, size):
pizza_done.send(sender=self.__class__, toppings=toppings, size=size)
send()는 예외 발생 시 멈추고 전파하지만, send_robust()는 예외를 처리하여 모든 수신기에게 신호를 보낸다.Signal.disconnect(receiver=None, sender=None, dispatch_uid=None) 메서드를 사용하여 신호의 수신기 연결을 끊을 수 있다.예제:
from django.core.signals import request_finished
request_finished.disconnect(my_callback, dispatch_uid="my_unique_identifier")
True, 실패하면 False를 반환한다.