Django 고급 구성
Django 신호
django는 프레임워크의 서로 다른 위치에서 정보를 전달하는 데 도움을 주는 신호 메커니즘을 자체로 가지고 있다.즉, 어떤 사건이 발생할 때 신호 시스템은 한 개 이상의 발송자(senders)가 알림이나 신호(signals)를 한 그룹의 수용자(receivers)에게 보내는 것을 허용할 수 있다.
신호 시스템의 세 가지 요소:
프레임 위치: 프레임 signals에 있습니다.py 파일에서예를 들어 프레임워크에 내장된 각 app 디렉토리에 있는django\contrib\APP\signals.py 파일과 django\core\signals.py 파일에서
# 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
# : 'pre' , 'post'
구체적인 Django 신호 내용
정의 신호
모든 신호는
django.dispatch.Signal
의 실례이다메소드 프로토타입:
def __init__(self, providing_args=None, use_caching=False):[source]
"""
providing_args:
use_caching :
"""
# :
신호를 보내다
Django에는 신호를 보내는 두 가지 방법이 있습니다.
Signal.send(sender, **kwargs)[source]
Signal.send_robust(sender,** kwargs)[source]
"""
: 1. sender ( ),
2.
"""
send() 및 sendrobust () 는 모듈 쌍의 목록을 되돌려줍니다. [(receiver,response),...수신기와 응답값 이원 그룹의 목록을 표시합니다.
예를 들어 보기 함수에서 다음과 같이 정의할 수 있습니다
class Panda(View):
def get(self,request):
Signal.send(sender=self.__class__,) ##
return HttpResponse("shiwei is Good")
def post(self, request):
Signal.send_robust(sender=self.__class__) ##
return JsonResponse({
"code": 200,
'msg': "is Successful",
})
신호를 받다
Django는 지정된 신호를 수신하기 위해 Signal 인스턴스의 connect() 방법을 사용합니다.
메소드 프로토타입:
def connect(self, receiver, sender=None, weak=True, dispatch_uid=None):
"""
receiver : , 。
sender : 。
weak :
dispatch_uid : , 。
"""
주의: 신호를 수신할 때 신호의 송신자sender 파라미터를 지정하지 않으면 이 신호가 모두 수신되는 것을 의미합니다.
두 번째 신호를 수신하는 방식은 장식기를 사용하는 것이다.신호를 처리하는 리셋 함수 위에 있다.이 방식은 내부에서도 모든 신호의 실례를 차례대로 connct () 방법으로 수신합니다.
방법 원형
def receiver(signal, **kwargs):
def _decorator(func):
if isinstance(signal, (list, tuple)): #
for s in signal:
s.connect(func, **kwargs)
else:
signal.connect(func, **kwargs)
return func
return _decorator
신호 수신기
신호 수신기란 신호를 받은 후의 촉발 동작으로 일반적으로 하나의 함수이다.
def signal_callback(sender, **kwargs):
print("is my callback")
"""
: sender **kwargs
"""
중복 신호 방지
중복 신호를 방지하기 위해서
dispatch_uid
파라미터를 설정하여 수신기를 표시할 수 있습니다. 표지부호는 보통 문자열입니다. 아래와 같습니다.from django.core.signals import request_finished
request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")
마지막 결과는 모든 유일한
dispatch_uid
값에 대해 수신기는 신호에 한 번만 귀속된다는 것이다.Django 내장 신호 조작 절차
from django.core.signals import request_finished #
request_finished.connect(callback_func) # ,
사용자 정의 신호 조작 절차
파일 만들기
Django 정의 신호는 일반적으로 app 디렉터리의signals에 저장됩니다.py 파일에서 먼저 app 디렉터리에signals를 만듭니다.py 파일
사용자 지정 신호
첫 번째 단계에서 정의된signals.py:
from django.dispatch import Signal
suosuo_signal = Signal()
사용자 정의 신호 수신기
신호 발송 문장과 같은 파일, 예를 들어 보기 파일views에 임의의 위치에 놓을 수 있습니다.py중
from django.dispatch import receiver
@receiver(signal=[suosuo_signal,], sender=SuoSuo) # signal , sender
def basket(sender, **kwargs): #
print('Signal %s, callback func: basket '%sender.__name__)
print('SuoSuo ')
사용자 정의 신호 전송문
예를 들어views에서.py중
from django.views import View
from django.http import HttpResponse, JsonResponse
from suosuo.signals import suosuo_signal
class SuoSuo(View):
def get(self,request):
suosuo_signal.send(sender=self.__class__,)
return HttpResponse("SuoSuo is Good")
def post(self, request):
suosuo_signal.send_robust(sender=self.__class__)
return JsonResponse({
"code": 200,
'msg': "is Successful",
})
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.