Django 고급 구성

5376 단어
카탈로그
  • Django 신호
  • 신호 시스템의 세 가지 요소:
  • 신호의 분류:
  • Django 내장 신호:
  • Django 신호 내용
  • 정의 신호
  • 송신 신호
  • 수신 신호
  • 신호 수신기
  • 중복 방지 신호
  • Django 내장 신호 작동 단계
  • 사용자 정의 신호 조작 절차
  • 파일 생성
  • 사용자 지정 신호
  • 사용자 정의 신호 수신기
  • 사용자 정의 신호 발송문


  • Django 신호
    django는 프레임워크의 서로 다른 위치에서 정보를 전달하는 데 도움을 주는 신호 메커니즘을 자체로 가지고 있다.즉, 어떤 사건이 발생할 때 신호 시스템은 한 개 이상의 발송자(senders)가 알림이나 신호(signals)를 한 그룹의 수용자(receivers)에게 보내는 것을 허용할 수 있다.
    신호 시스템의 세 가지 요소:
  • 신호의 실례
  • 송신자의 어떤 신호의 송신자
  • 수신자의 하나 이상의 신호를 받는 사람
  • 신호의 분류:
  • Django 내장 신호, 프레임 내장된 Signal 실례, 송신자는 Django 프레임워크
  • 사용자 정의 신호로 개발자가 수동으로 Signal 실례를 만들고 발송자와 수신자를 지정해야 한다
  • Django 내장 신호:
    프레임 위치: 프레임 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",
            })

    좋은 웹페이지 즐겨찾기