3 분 동안 Python 백 엔 드 에서 알 아야 할 Django 의 신호 메커니즘 을 알 아 봅 니 다.
django 는 프레임 의 서로 다른 위치 에서 정 보 를 전달 하 는 데 도움 을 주 는 신호 체 제 를 가지 고 있 습 니 다.즉,어떤 사건 이 발생 했 을 때 신호 시스템 은 한 개 이상 의 발신 자(senders)가 알림 이나 신호(signals)를 한 그룹의 수신 자(receivers)에 게 보 낼 수 있 도록 허용 할 수 있다.
(Qt 의 신호 와 슬롯 메커니즘 처럼 느껴 진다)
신호 시스템 은 다음 과 같은 세 가지 요 소 를 포함한다.
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]
인자:
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 신호 체제 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.