23:django 신호(signal)
5576 단어 django
이를 위해django는 내장된 신호를 많이 제공했다. 예를 들어 자주 사용하는 기능(django.db.models.signal 디렉터리에 있는 몇 개의 신호를 예로 들면):
더 많은 것을 알고 싶으면django의 내장 신호 문서를 보십시오. 이 절의 마지막 부분에도 모든 내장 신호의 간략한 소개가 있습니다.
감청 신호
신호를 받아들이려면, 신호가Signal에 의해 수신기 함수를 등록해야 한다.connect () 방법이 발사될 때 이 함수는 호출됩니다
Signal.connect(receiver[,sender=None,weak=True,dispatch_uid=None])
매개변수 설명:
리셋 함수receiver
콜백 함수는 수신기를 다음과 같이 정의할 수 있는 함수 또는 방법일 수 있습니다.
def my_callback(sender, **kwargs):
print "Request finished!"
모든 신호 처리기는 이 두 개의 인자를 필요로 합니다:sender와 **kwargs.모든 신호는 키워드 파라미터를 보내기 때문에 처리할 때 파라미터가 없을 수도 있지만 처리하는 과정(당신이 쓴 처리 함수 이전)에 어떤 파라미터가 생성된 것을 의미하지 않습니다. **kwargs 파라미터가 전송되지 않으면 문제가 발생할 수 있습니다.이러한 고려를 바탕으로 이 두 매개 변수는 모두 필수적이다.
receiver 리셋 함수에 연결
두 가지 방법으로 신호와 수신기를 연결할 수 있다.
connect 방법
from django.core.signals import request_finished
request_finished.connect(my_callback)
장식기 방법
from django.core.signals import request_finished
from django.dispatch import receiver
@receiver(request_finished)
def my_callback(sender, **kwargs):
print "Request finished!"
이렇게 설정하면 HTTP가 받아들일 때마다 이 수신기 리셋 함수를 호출합니다
특정 발송자 귀속
위에 적어 놓으면 매번 호출하면 짜증나지 않을까요?나 같으면 짜증났을 거야. 왜냐하면 나는 모든 사람의 신호를 받아들이고 싶지 않으니까sender 키워드 파라미터를 설정해야 돼.
두 번째 지식: 모든 종류의 신호는 특정한 발송자에 대응하기 때문에 발송자를 귀속시키려면 대응하는 발송자 유형을 귀속시켜야 한다. 예를 들어 Requestfinished는 handler class에 대응하고presave 대응 모델 클래스
다음은 pre-save를 예로 삼아 특정한 발송자(모델)를 연결합니다.
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
중복 방지 신호
dispatch 사용uid 키워드 매개 변수
request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")
신호를 어떻게 감청하는지 말했으니 계속해서 정의와 발송 신호를 설명해 드리겠습니다.]
정의 신호
class Signal([providing_args=list])
모든 신호는django입니다.dispatch.Signal의 인스턴스, providing 매개변수args는 신호가 감청기에 제공하는 매개 변수 이름의 목록입니다. 예를 들어:
import django.dispatch
pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
이 코드는 피자 를 정의했다done의 신호, 매개 변수는 toppings와size
신호를 보내다
신호를 보내는 두 가지 방법이 있어요.
Signal.send(sender,**kwargs)
Signal.send_robust(sender,**kwargs)
sender 매개 변수는 필수입니다. 키워드 매개 변수는 선택할 수 있습니다.
class PizzaStore(object):
...
def send_pizza(self, toppings, size):
pizza_done.send(sender=self, toppings=toppings, size=size)
이 두 가지 방법은 모두 하나의 원조를 되돌려줍니다. [(receiver,respose)...]호출된receiver 리셋 함수와 그들의response를 대표하는 목록
이 두 가지 방법의 차이점은send가 어떠한 이상도 포착하지 않고 (잘못된 전파를 방치하고) sendrobust는 모든 이상을 포착하고 모든 수신기가 이 신호를 알고 있는지 확인합니다. (오류가 발생하면 오류 실체와 오류가 발생한 수신기가 하나의 원조로 그 목록에 되돌아옵니다.)
인터럽트 시그널
Signal.disconnect([receiver=None,sender=None,weak=True,dispatch_uid=None)
수신 신호와 유사
receiver 매개 변수는 그 수신기가 끊겼음을 표시하는 데 사용됩니다.dispatchuid의 경우 receiver는 None
총괄적으로 말하면django가 자체로 가지고 있는 신호를 사용할 수도 있고 자신의 신호를 사용자 정의할 수도 있다. 신호는connect,send도disconnect 등등이 가능하다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.