Django-Signals 신호량

1772 단어 django
신호량이 가장 많은 Django의 핵심 지식점으로 프로젝트에서 사용되지 않기 때문에 많은 사람들이 모르거나 들어보지 못했다(나 포함).간단하게 말하면 몇 가지 조작을 진행하기 전에 우리는 신호를 보내서 특정한 조작을 얻을 수 있다. 이런 조작은 다음과 같다.https://yiyibooks.cn/xx/Djang...:
  • django.db.models.signals.pre_save&django.db.models.signals.post_save는 모델 save () 방법이 호출되기 전이나 후에 발송됩니다
  • django.db.models.signals.pre_delete&django.db.models.signals.post_delete는 모델 delete () 방법이나 조회 집합의 delete () 방법이 호출되기 전이나 이후에 발송됩니다
  • django.db.models.signals.m2m_changed 모델에서 ManyToManyField가 수정될 때 보냅니다
  • django.core.signals.request_started&django.core.signals.request_finishedDjango가 HTTP 요청을 시작하거나 완료할 때 보냅니다

  • 기타 세밀한 지식은 링크를 눌러서 볼 수 있고 하나의 예를 통해 설명할 수 있다.
    4
  • 사용자 정의 사용자 모델 클래스를 사용할 때 백엔드에 사용자 데이터를 추가합니다. 사용자 정의 모델 클래스의create를 사용했기 때문에 비밀번호는 명문으로 저장됩니다. 다음에 신호량 방식으로 저장한 후에 바로 비밀번호를 수정하여 해결합니다.(인터넷상의 한 항목의 예)
  • users/signals.py
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from django.contrib.auth import get_user_model
    User = get_user_model()
    
    
    # post_save:        :          
    # sender:      model
    @receiver(post_save, sender=User)
    def create_user(sender, instance=None, created=False, **kwargs):
        """
        sender:   。
        instance:       。
        created:        True。
        update_fields:Model.save()       ,        None
        """
        if created:
            password = instance.password
            # instance   user
            instance.set_password(password)
            instance.save()

    users/apps.py
    from django.apps import AppConfig
    
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = '    '
    
        def ready(self):
        """  ready  ,     """
            import users.signals

    좋은 웹페이지 즐겨찾기