Django에서는 프레임워크가 작업을 수행할 때 분리를 위해 "신호 전달"이 제공됩니다. 일반인의 관점에서 신호를 사용하면 특정 발신자가 특정 작업이 발생할 때 일부 수신자에게 경고할 수 있습니다.
Django는 신호 메커니즘을 제공합니다. 실제로 이는 게시-구독(Publish/Subscribe)이라고도 하는 관찰자 패턴입니다. 어떤 작업이 발생하면 신호가 방출되고 신호를 듣는 함수가 실행됩니다.
Django에는 다음과 같은 몇 가지 신호가 내장되어 있습니다.
django.db.models.signals.pre_save 在某个Model保存之前调用 django.db.models.signals.post_save 在某个Model保存之后调用 django.db.models.signals.pre_delete 在某个Model删除之前调用 django.db.models.signals.post_delete 在某个Model删除之后调用 django.core.signals.request_started 在建立Http请求时发送 django.core.signals.request_finished 在关闭Http请求时发送
우리가 해야 할 일은 수신자 기능을 등록하는 것입니다. 예를 들어, 각 요청이 완료된 후 한 줄을 인쇄하려는 경우입니다.
은 콜백을 사용하여 등록할 수 있습니다.
# receiver def my_callback(sender, **kwargs): print("Request finished!") # connect from django.core.signalsimport request_finished request_finished.connect(my_callback)
는 데코레이터를 사용하여 등록할 수도 있습니다. 다음 코드는 위와 완전히 동일합니다.
from django.core.signalsimport request_finished from django.dispatchimport receiver @receiver(request_finished) def my_callback(sender, **kwargs): print("Request finished!")
receiver콜백 기능sender를 사용하는 것 외에도 pre_save 기능과 같은 다른 매개변수를 사용할 수도 있습니다.
sender: sender(pre_save인 경우 모델 클래스)
instance: 인스턴스
raw
using
update_fields
post_save()는 일부 연결을 지원할 수 있는 보다 실용적인 함수입니다. 업데이트. 매번 뷰에 작성하는 대신. 예: 사용자가 환불 신청서를 제출하는 경우 주문의 상태 를 "환불됨" 상태로 변경해야 합니다. 어디에서나 수정하지 않고도 신호 메커니즘을 사용할 수 있습니다.
@receiver(post_save, sender=RefundForm) deforder_state_update(sender, instance, created, **kwargs): instance.order.state = REFUNDING instance.order.save() # 这里,order是refundform的一个外键
물론 여기에는 환불 주문 취소, 상태 다시 변경 등 점점 더 포괄적인 내용을 작성할 수 있습니다.
Observer는 매우 실용적인 디자인 패턴입니다. Django는 사용자 정의 신호도 지원합니다.
【관련 추천사항】
1. 특별 추천: "php Programmer Toolbox" V0.1 버전 다운로드
위 내용은 Django의 관찰자 패턴에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!