Django 프레임워크의 Django 신호

3878 단어
지식점
  • 개념
  • 신호를 어떻게 감청하는가
  • Django 내장 신호
  • 사용자 지정 신호
  • Django 내장 신호 사용
  • 콘셉트
    Django는 프레임워크의 다른 곳에서 작업이 발생할 때 알림을 받을 수 있도록 '신호 배달기' 를 제공합니다.즉, 특정 사건이 발생할 때 하나의 신호를 보내서 이 신호의 하나 또는 여러 개의 리셋을 등록했다고 통지하고 리셋에서 논리적으로 처리할 수 있다.
    어떻게 신호를 감청합니까
    Signal 실례 신호 리셋이 있습니다. 신호 리셋을 Signal 실례에 연결하여 특정 이벤트에서 Signal에서 신호를 보냅니다.
    Django 내장 신호
    django.db.models.signals.pre_save & post_save ㎡는 모델 save() 방법이 호출되기 전이나 이후에 전송됩니다.django.db.models.signals.pre_delete & post_모델 delete () 방법이나 조회 집합의 delete () 방법이 호출되기 전이나 이후에 발송됩니다.django.core.signals.request_started & request_finished ㎡Django에서 HTTP 요청을 설정하거나 닫을 때 보냅니다.
    참조 문서
    코드 주소:Spareibs의 Github
    실험 조작
    사용자 지정 신호
    등록 신호
    【signal.py】
    from django.dispatch import Signal, receiver
    
    signalAllen = Signal(providing_args=['allen'])
    
    @receiver(signalAllen)
    def signal_callback(sender, **kwargs):
        print(sender, kwargs)
        print('signal_callback called')
    
    #   ,         
    # signalAllen.connect(signal_callback)
    
    #       
    @receiver(signalAllen)
    def signal_callback1(sender, **kwargs):
        print(sender, kwargs)
        print('signal_callback1 called')
    

    【urls.py】
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^$', view=views.index),
    ]
    

    【views.py】
    from . import signals
    # Create your views here.
    
    def index(request):
        signals.signalAllen.send(sender=None, allen='test')
        return render(request, template_name='index.html')
    

    신호 삭제
    【urls.py】
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^disconnect/$', view=views.disconnect_signal),
    ]
    

    【views.py】
    def disconnect_signal(request):
        signals.signalAllen.disconnect(signals.signal_callback)
        return render(request, template_name='index.html')
    

    Django 내장 신호
    간단한 사용
    【views.py】
    from django.shortcuts import render
    from .models import Poem, Task
    # Create your views here.
    
    def modify(request):
        poem = Poem.objects.get(pk=1)
        poem.title = '1'
        #        pre_save post_save
        poem.save()
    
        task = Task.objects.get(pk=1)
        task.name = '1'
        task.save()
    
        return render(request, template_name='index.html')
    

    【urls.py】
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^modify/$', view=views.modify),
    ]
    

    【singals.py】
    from django.db.models.signals import pre_save, post_save
    
    @receiver(pre_save)
    def pre_save_callback(sender, **kwargs):
        print('pre_save_callback')
    
    
    @receiver(post_save)
    def post_save_callback(sender, **kwargs):
        print('post_save_callback')
    

    지정 신호
    【views.py】
    from django.shortcuts import render
    from .models import Poem, Task
    # Create your views here.
    
    def modify(request):
        poem = Poem.objects.get(pk=1)
        poem.title = '1'
        #        pre_save post_save
        poem.save()
    
        task = Task.objects.get(pk=1)
        task.name = '1'
        task.save()
    
        return render(request, template_name='index.html')
    

    【urls.py】
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
        url(r'^modify/$', view=views.modify),
    ]
    

    【singals.py】
    from django.db.models.signals import pre_save, post_save
    from .models import Poem, Task
    
    @receiver(pre_save, sender=Poem)
    def pre_save_callback(sender, **kwargs):
        print('pre_save_callback', sender, kwargs)
    
    
    @receiver(post_save, sender=Task)
    def post_save_callback(sender, **kwargs):
        print('post_save_callback', sender, kwargs)
    

    좋은 웹페이지 즐겨찾기