django模型信号

1,信号

django.db.models.signals模块定义了模型系统发送的一组信号。信号允许某些发送者通知一组接收器已经发生了某些动作,当许多代码片段可能对相同的事件感兴趣时,它们特别有用。
例如:
pre_save在save()方法之前发送
post_save在save()方法结束时发送:
参数:
(sender, instance, created, **kwargs)
sender模型类
instance保存的模型实例
created布尔值,如果创建了新纪录则为true

2,接收信号

Signal.connect(receiver,sender = None,weak = True,dispatch_uid = None)

为了接受信号,用connect()注册一个接收方法,当信号发送的时候,该方法被调用
connect方法用于连接信号和信号处理函数,类似的概念相当于为某个事件(信号发出表示一个事件)注册观察者(处理函数),函数参数中receiver就是信号处理函数,sender表示信号的发送者,比如Django框架中的post_save()这个信号,任何一个模型在save()函数调用之后都会发出这个信号,但是我们只想关注某一个模型 save()方法调用的事件发生,就可以指定sender为我们需要关注的模型类。

3,使用场景举例:当用户发送评论的时候,通知文章作者

from django.db.models.signals import post_save
from .models import ArticleComment, Notification

#信号处理函数
def notify_handler(sender, instance, created, **kwargs):
	create_p = instance.author#评论的作者
	if created:#如果是新创建的评论,则保存消息通知
		new_notify = Notification(create_p=create_p, comment=instance)
        new_notify.save()

connect接收信号,指定信号处理函数以及信号的发送者

post_save.connect(notify_handler, sender=ArticleComment)

然后再使用添加评论的视图中引入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值