Python 백엔드에서 알아야 할 Django의 신호 메커니즘을 3분 동안 알아봅시다!
django는 프레임워크의 서로 다른 위치에서 정보를 전달하는 데 도움을 주는 신호 메커니즘을 자체로 가지고 있다.즉, 어떤 사건이 발생할 때 신호 시스템은 한 개 이상의 발송자(senders)가 알림이나 신호(signals)를 한 그룹의 수용자(receivers)에게 보내는 것을 허용할 수 있다.
(Qt의 신호와 슬롯 메커니즘 같다)
신호 시스템에는 다음 세 가지 요소가 포함됩니다.
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]
매개변수:
장식기법
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
전송된 모델 대상을 읽으려면 반드시
instance
파라미터를 사용해야 합니다. sender
!sender
한 장르예요!dispatch 설정uid 매개 변수 중복 방지 신호
중복 신호를 방지하기 위해 디스패치를 설정할 수 있습니다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/
PS: 다음에는 Django Admin 방안에 대한 조사 연구, emm, 그리고 위챗 애플릿의 로그인, 결제 접속에 관한 글을 쓸 것입니다. 그리 어려운 것은 아니지만 처음 사용하면 곳곳에 구덩이가 가득합니다.
환영하다
저는 일련의 기술 문장과 자료를 정리하여 공중번호'프로그래밍실험실'백엔드에서 linux,flutter,c#,netcore,android,java,python 등 관련 기술 문장과 자료를 얻을 수 있고 문제가 있으면 공중번호 백엔드에 메시지를 남길 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.