3 분 동안 Python 백 엔 드 에서 알 아야 할 Django 의 신호 메커니즘 을 알 아 봅 니 다.

콘 셉 트
django 는 프레임 의 서로 다른 위치 에서 정 보 를 전달 하 는 데 도움 을 주 는 신호 체 제 를 가지 고 있 습 니 다.즉,어떤 사건 이 발생 했 을 때 신호 시스템 은 한 개 이상 의 발신 자(senders)가 알림 이나 신호(signals)를 한 그룹의 수신 자(receivers)에 게 보 낼 수 있 도록 허용 할 수 있다.
(Qt 의 신호 와 슬롯 메커니즘 처럼 느껴 진다)
신호 시스템 은 다음 과 같은 세 가지 요 소 를 포함한다.
  • 발신 자-신호 발신 자
  • 신호-신호 자체
  • 수신 자-신호 수신 자
  • Django 에 전체 신호 가 내장 되 어 있 습 니 다.다음은 비교적 자주 사용 되 는 것 입 니 다.
    Django 내장 신호
    
    Model signals
      pre_init          # django modal        ,    
      post_init          # django modal        ,    
      pre_save          # django modal     ,    
      post_save          # django modal     ,    
      pre_delete         # django modal     ,    
      post_delete         # django modal     ,    
      m2m_changed         # django modal   m2m        (add,remove,clear)  ,    
      class_prepared       #      ,      app modal ,      ,    
    Management signals
      pre_migrate         #   migrate   ,    
      post_migrate        #   migrate   ,    
    Request/response signals
      request_started       #      ,    
      request_finished      #      ,    
      got_request_exception    #      ,    
    Test signals
      setting_changed       #   test         ,    
      template_rendered      #   test       ,    
    Database Wrappers
      connection_created     #         ,    
    ORM 모델 의 save()방법 이 호출 되 기 전이 나 그 후에 신 호 를 보 냅 니 다.
    
    django.db.models.signals.pre_save
    django.db.models.signals.post_save
    
    ORM 모델 이나 조회 집의 delete()방법 이 호출 되 기 전이 나 그 후에 신 호 를 보 냅 니 다.
    
    django.db.models.signals.pre_delete
    django.db.models.signals.post_delete
    
    다 중 필드 가 수정 되 었 을 때 신 호 를 보 냅 니 다.
    
    django.db.models.signals.m2m_changed
    HTTP 요청 을 받 고 닫 을 때 신 호 를 보 냅 니 다.
    
    django.core.signals.request_started
    django.core.signals.request_finished
    
    이것 은 매우 편리 합 니 다.이런 상황 을 상상 해 보 세 요.우 리 는 제3자 Django 라 이브 러 리 를 도 입 했 습 니 다.그 는 모델 을 만 들 것 입 니 다.우 리 는 그의 코드 를 수정 하지 않 고 그 가 모델 을 만 들 때 다른 표 의 데 이 터 를 동시에 수정 하려 고 합 니 다.그러면 이 럴 때 신호기 제 가 도움 이 될 것 입 니 다.
    단순 사용 예
    신호 감청 은 두 가지 방식 이 있 는데 하 나 는 Signal.connect()방법 이 고 하 나 는 장식 기 이다.
    Signal.connect()방법
    방법 원형:
    
    Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)[source]
    
    인자:
  • receiver:현재 신호 연결 의 반전 함수,즉 신 호 를 처리 하 는 함수 입 니 다.
  • sender:어느 발신 자 에서 신 호 를 받 을 지 지정 합 니 다.
  • weak:약 인용 여부
  • dispatch_uid:신호 수신 기의 유일한 식별 자 는 신호 가 여러 번 전송 되 지 않도록 합 니 다.
  • 장식 기법
    
    from django.core.signals import request_finished
    from django.dispatch import receiver
    
    @receiver(request_finished)
    def my_callback(sender, **kwargs):
      print("Request finished!")
    
    
    receiver 에 sender 인 자 를 추가 하여 어떤 모델 이 발생 하 는 신 호 를 선택 할 수 있 습 니 다.예 를 들 어:
    
    from django.db.models import signals
    from django.dispatch import receiver
    
    @receiver(signals.post_save, sender=MyModel)
    def demo_callback(sender: MyModel, instance: MyModel, **kwargs):
      pass
    
    
    들 어 오 는 모델 대상 을 읽 으 려 면 sender 가 아 닌 instance 매개 변 수 를 사용 해 야 합 니 다!sender 는 같은 타 입!
    dispatch 설정uid 매개 변수 중복 신호 방지
    중복 신 호 를 방지 하기 위해 dispatch 를 설정 할 수 있 습 니 다.uid 매개 변 수 는 수신 기 를 표시 합 니 다.식별 자 는 보통 문자열 입 니 다.다음 과 같 습 니 다.
    
    from django.core.signals import request_finished
    
    request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")
    
    
    차단 신호
    어떤 조건 을 만족 시 키 는 상황 에서 우 리 는 더 이상 감청 신 호 를 필요 로 하지 않 고 신 호 를 끊 는 것 을 선택 할 수 있다.
    Signal.disconnect()는 신 호 를 끊 는 수신 기 입 니 다.Signal.connect()의 인자 와 같 습 니 다.수신 기 가 성공 적 으로 끊 어 지면 True 로 돌아 갑 니 다.그렇지 않 으 면 False 로 돌아 갑 니 다.
    
    Signal.disconnect(receiver=None, sender=None, dispatch_uid=None)[source]
    
    후기
    최근 입사 프로젝트 가 매우 바 쁘 고 신기 술 도 많이 배 웠 습 니 다.하지만 블 로 그 를 잘 쓸 시간 이 오래 되 지 않 은 것 같 습 니 다.본문 이라도 짧 은 시간 에 모 았 습 니 다.정말 어렵 습 니 다.주말 에 최근 의 기술 노트 를 잘 정리 해 야 합 니 다.
    Django 신호 메커니즘 에 대한 더 많은 내용(사용자 정의 신호 등)은 공식 문 서 를 참고 할 수 있 습 니 다.https://docs.djangoproject.com/en/3.0/topics/signals/
    3 분 동안 Python 백 엔 드 에서 알 아야 할 Django 의 신호 체 제 를 알 아 보 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Django 신호 체제 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기