首页 > 其他 > 详细

Django 信号

时间:2019-05-01 18:57:36      阅读:178      评论:0      收藏:0      [点我收藏+]

django信号

signals 信号博客资料

Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到。 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生。 这在多处代码和同一事件有关联的情况下很有用。

位置: django.db.models.signals

常用:

pre_save **

django.db.models.signals.pre_save

  • 这是在模型的save()方法的开头发送的。

带有此信号的参数:

  • sender

    模型类。
    instance
    正在保存的实际实例。
    raw
    一个布尔值True如果模型按照显示的方式保存(即当加载固定装置时)。 不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。
    using
    正在使用的数据库别名。
    update_fields
    如果有字段被传递给Model.save()方法那么就是所传递的字段集,否则就是None。

    在任意位置写函数绑定即可

    # 导入 信号
    from django.db.models.signals import pre_save
    
    def my_callback(sender, **kwargs):
        print(sender)  # 激活函数的 model
        print(kwargs)
        print("要保存了啊!")
        print('-' * 120)
    
    # 绑定信号
    pre_save.connect(my_callback)
    

post_save **

django.db.models.signals.post_save

  • 像pre_save一样,但是在save()方法的末尾发送。

带有此信号的参数:

  • sender

    模型类。
    instance
    正在保存的实际实例。
    created
    一个布尔值True如果创建了新记录。
    raw
    一个布尔值True如果模型按照显示的方式保存(即当加载固定装置时)。 不应该查询/修改数据库中的其他记录,因为数据库可能尚未处于一致状态。
    using
    正在使用的数据库别名。
    update_fields
    如果有字段被传递给Model.save()方法那么就是所传递的字段集,否则就是None。

pre_delete

django.db.models.signals.pre_delete

  • 在模型的delete()方法和queryset的delete()方法的开头发送。

带有此信号的参数:

  • sender

    模型类。
    instance
    正在删除的实际实例。
    using
    正在使用的数据库别名。

post_delete

django.db.models.signals.post_delete

  • 像pre_delete一样,但是在模型的delete()方法和queryset的delete()方法的末尾发送。

带有此信号的参数:

  • sender

    模型类。
    instance
    正在删除的实际实例。

    请注意,该对象将不再位于数据库中,所以要非常小心使用此实例。

    using
    正在使用的数据库别名。

使用装饰器方法:

from django.dispatch import receiver

# 使用装饰器方式
from django.db.models.signals import pre_save
from django.dispatch import receiver


@receiver(pre_save, sender="xxx") # sender 发送者
def my_callback(sender, **kwargs):
    print(sender)
    print(kwargs)
    print("要保存了啊!")
    print('-' * 120)

Django 信号

原文:https://www.cnblogs.com/zhang-zi-yi/p/10800413.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!