Django signal

本文介绍了Django的信号机制,包括什么是信号、最佳使用场景、内建信号的使用以及如何自定义信号。信号用于在框架内解耦应用程序,使得在事件发生时多个组件能收到通知。文中列举了何时应该使用和不应使用信号,并提供了使用receiver装饰器和connect方法订阅信号的示例。
摘要由CSDN通过智能技术生成

这不是大神的随笔,只是记忆力不好的码农笔记

参考:https://segmentfault.com/a/1190000008455657
参考:https://blog.csdn.net/laughing2333/article/details/53159109

什么是django的signal

官方文档描述如下:
Django includes a “signal dispatcher” which helps allow decoupled applications get notified when actions occur elsewhere in the framework.In a nutshell, signals allow certain senders to notify a set of receivers that some action has taken place. They’re especially useful when many pieces of code may be interested in the same events.
Django内部包含了一位“信号调度员”:当某事件在框架内发生时,它可以通知到我们的应用程序。 简而言之,当event(事件)发生时,signals(信号)允许若干 senders(寄件人)通知一组 receivers(接收者)。这在我们多个独立的应用代码对同一事件的发生都感兴趣时,特别有用。

最佳使用场景

通知类
通知是signal最常用的场景之一。例如,在论坛中,在帖子得到回复时,通知楼主。从技术上来讲,我们可以将通知逻辑放在回复保存时,但是这并不是一个好的处理方式,这样会时程序耦合度增大,不利于系统的后期扩展维护。如果我们在回复保存时,只发一个简单的信号,外部的通知逻辑拿到信号后,再发送通知,这样回复的逻辑和通知的逻辑做到了分开,后期维护扩展都比较容易。

初始化类
信号的另一个例子便是事件完成后,做一系列的初始化工作

其他一些使用场景总结

以下情况不要使用signal:

  • signal与一个model紧密相关,并能移到该model的save()时
  • signal能使用model manager代替时
  • signal与一个view紧密相关,并能移到该view中时

以下情况可以使用signal

  • signal的receiver需要同时修改对多个mode
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值