Django-Signals信号量

栏目: Python · 发布时间: 6年前

内容简介:信号量最为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_finished

    Django开始或完成HTTP请求时发送。

其他细致的知识点,大家可以点链接查看,直接通过一个例子解释:

  • 在自定义用户模型类的时候,在后台添加用户数据因为使用了自定义模型类的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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Introduction to Tornado

Introduction to Tornado

Michael Dory、Adam Parrish、Brendan Berg / O'Reilly Media / 2012-3-28 / USD 23.99

Tornado is a scalable, non-blocking web server and web application framework written in Python. It is also light-weight to deploy, fun to write for, and incredibly powerful. Tornado was written with p......一起来看看 《Introduction to Tornado》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试