Django-Signals信號量

信號量最爲Django的一個核心知識點,在項目中不多有使用到,因此不少人都不瞭解或者沒聽過過(包括我)。簡單來講就是在進行一些操做的先後咱們能夠發出一個信號來得到特定的操做,這些操做包括(信息來自:https://yiyibooks.cn/xx/Djang...html

  • django.db.models.signals.pre_save&django.db.models.signals.post_save

    在模型 save()方法調用以前或以後發送。django

  • django.db.models.signals.pre_delete&django.db.models.signals.post_delete

    在模型delete()方法或查詢集的delete() 方法調用以前或以後發送。app

  • django.db.models.signals.m2m_changed

    模型上的 ManyToManyField 修改時發送。post

  • django.core.signals.request_started&django.core.signals.request_finished

    Django開始或完成HTTP請求時發送。spa

其餘細緻的知識點,你們能夠點連接查看,直接經過一個例子解釋:code

  • 在自定義用戶模型類的時候,在後臺添加用戶數據由於使用了自定義模型類的create因此密碼會以明文保存,接下來使用信號量方式在保存後立刻修改密碼解決。(網上一個項目的例子)

users/signals.pyhtm

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.pyget

from django.apps import AppConfig


class UsersConfig(AppConfig):
    name = 'users'
    verbose_name = '用戶管理'

    def ready(self):
    """使用ready加載,不然不生效"""
        import users.signals
相關文章
相關標籤/搜索