Django 의 신호 메커니즘 상세 설명

1950 단어 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 함 수 를 등록 하 는 것 이다.예 를 들 어 요청 이 끝 날 때마다 한 줄 의 글 자 를 인쇄 해 야 한다.
리 셋 방식 으로 등록 할 수 있 습 니 다:

# 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 를 사용 할 수 있 는 것 외 에 다른 매개 변 수 를 사용 할 수 있 습 니 다.예 를 들 어 presave 함수:
sender:발송 자(pre 라면save 라면 model class)
인 스 턴 스:인 스 턴 스
raw
using
update_fields
post_save()는 비교적 실 용적 인 함수 로 연 결 된 업 데 이 트 를 지원 할 수 있 습 니 다.매번 view 에 쓰 게 할 필 요 는 없습니다.예 를 들 어 어떤 사용자 가 환불 신청 을 제출 했 기 때문에 우 리 는 주문서 의 상 태 를'이미 환불 한'상태 로 수정 해 야 한다.모든 곳 에서 수정 할 필요 가 없 이 신호 체 제 를 사용 할 수 있다.

@receiver(post_save, sender=RefundForm)
deforder_state_update(sender, instance, created, **kwargs):
  instance.order.state = REFUNDING
  instance.order.save() #   ,order refundform     
물론 환불 취소 상태 등 더 주도면밀 하 게 쓸 수 있다.
관찰 자 는 매우 실 용적 인 디자인 모델 로 Django 도 사용자 정의 신 호 를 지원 합 니 다.

좋은 웹페이지 즐겨찾기