Django 신호 파트 1

3062 단어 webdevdjangopython
이 글에서는 Django 내장 시그널이 무엇인지 설명하겠습니다. 어디에서 구현됩니까? 왜 그렇게 효과적이고 유용합니까? 시작하자!

Django signal helps decoupled applications get notified when actions occur elsewhere in the framework.



이는 특정 조건이 충족되면 함수가 실행되도록 알림을 받는 것을 의미합니다. 예를 들어 데이터베이스에 새 레코드를 추가할 때 저장, 삭제 등의 작업 전후에 기능을 수행해야 하는 경우가 있습니다.

Django Signals는 우리를 위해 무엇을 할 수 있습니까? 다음 시나리오를 고려하십시오. 사용자가 많은 블로그 플랫폼이 있고 사용자가 새 기사를 게시하면 다른 모든 사용자에게 "새 기사가 추가되었습니다. 확인하십시오."와 같은 짧은 알림을 전송하여 알려야 한다고 가정합니다.

이 경우 Django 신호를 사용하여 기사가 데이터베이스에 성공적으로 저장되면 다른 모든 사용자에게 알림을 보내는 데 사용되는 기능을 알릴 수 있습니다.



Django에는 모델, 관리, HTTP 요청, 테스트 및 데이터베이스 래퍼의 다섯 가지 기본 제공 신호가 있습니다. 이러한 각 신호는 연결 및 연결 해제와 같은 신호 처리를 위한 함수 집합을 제공하는 신호 클래스의 개체입니다.

신호에는 일반적으로 사용되는 두 가지 매개변수(송신자와 수신자)가 있습니다. 우리는 신호를 보낼 사람과 신호를 받을 위치를 지정할 수 있습니다. 어떤 기능을 실행해야 합니까?

Django 신호 시리즈의 이 부분에서는 요청/응답(HTTP) 신호를 살펴보고 세부 사항을 설명하고 이를 쉽고 정확하게 활용하는 방법을 보여줍니다.

요청/응답 신호는 HTTP 요청과 함께 작동하여 요청에 대한 성능 보고서를 생성하거나 요청이 시작될 때, 완료될 때 또는 오류가 발생할 때 일부 작업을 수행하는 것과 같은 다양한 작업을 수행하는 데 사용됩니다.

요청/응답 신호:
  • request_started 신호
  • Request_finished 신호
  • got_request_exception 신호

  • 신호로 작업하려면 수신기 기능에 '**Kwargs' 매개변수가 있어야 합니다.

    #request/response signals can import statement 
    from django.core.signals import <#Name-Signal#>
    




  • request_started 신호:

  • 수입 명세서:from django.core.signals import request_started
    요청이 시작되면 이 신호는 기능을 실행하는 데 사용됩니다. 예를 들어 요청이 시작되면 타이머를 시작합니다.

    매개변수:

    -1 보낸 사람: 기본 구성에서 request_started 신호의 보낸 사람은 WSGI입니다.
    -2 Environ: 요청에 제공되는 Environ 사전


  • request_finished 신호

  • 수입 명세서:from django.core.signals import request_finished
    이 신호는 요청이 완료되었을 때 기능을 실행하는 데 사용됩니다. 요청이 완료되면 타이머를 중지하려는 이전 예제를 따릅니다.

    request_finished에는 하나의 매개변수가 있습니다.

    -1 발신자: 위와 같음


  • got_request_exception

  • 이 신호는 요청 예외에 사용됩니다. 예를 들어 실패 로그를 텍스트 파일에 저장하려고 합니다.

    수입 명세서:from django.core.signals import got_request_exception
    request_finished에는 하나의 매개변수가 있습니다.

    -1 발신자: 사용하지 않음(항상 None)
    -2 요청: Django 프레임워크의 HTTPRequest 클래스에서 제공하는 HTTPRequest 객체,


    코드 :




    import time 
    import logging
    from django.core.signals import request_started,\
        request_finished,\
        got_request_exception
    
    def started(sender, **kwargs):
         global started
         started = time.time()
    
    def finished(sender, **kwargs):
        total = time.time() - started
        print ("Timer| %.4fs" % total)
    
    def log(**kwargs):
        logging.exception('error')
    
    request_started.connect(started) 
    request_finished.connect(finished) 
    got_request_exception.connect.connect(log)
    
    

    좋은 웹페이지 즐겨찾기