全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Django的信号机制详解

Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。

Django内置了一些信号,比如:

django.db.models.signals.pre_save 在某个Model保存之前调用
django.db.models.signals.post_save 在某个Model保存之后调用
django.db.models.signals.pre_delete 在某个Model删除之前调用
django.db.models.signals.post_delete 在某个Model删除之后调用
django.core.signals.request_started 在建立Http请求时发送
django.core.signals.request_finished 在关闭Http请求时发送

我们要做的,就是注册一个receiver函数。例如,如果要在每次请求完成之后,打印一行字。

可以使用回调的方式注册:

# receiver
def my_callback(sender, **kwargs):
  print("Request finished!")
 
# connect
from django.core.signalsimport request_finished
 
request_finished.connect(my_callback)

也可以使用装饰器的方式注册,下面这段代码和上面完全是等价的。

from django.core.signalsimport request_finished
from django.dispatchimport receiver
 
@receiver(request_finished)
def my_callback(sender, **kwargs):
  print("Request finished!")

receiver回调函数除了可以使用sender之外,还可以使用其他一些参数,比如针对pre_save函数:

sender:发送者(如果是pre_save的话,就是model class)
instance:实例
raw
using
update_fields
post_save()是一个比较实用函数,可以支持一些联动的更新。而不必让我们每次都写在view里面。比如:有用户提交了退款申请,我们需要把订单的状态修改成“已退款”的状态。就可以使用信号机制,而不必在每处都修改。

@receiver(post_save, sender=RefundForm)
deforder_state_update(sender, instance, created, **kwargs):
  instance.order.state = REFUNDING
  instance.order.save() # 这里,order是refundform的一个外键

当然,这里可以写的更多更周全,例如退款单取消改回状态等。

观察者是非常实用的一个设计模式,Django也支持用户 自定义 一些信号。


# django  # 框架详解  # 缓存机制  # django异步机制  # 3分钟看懂Python后端必须知道的Django的信号机制  # 深入理解Django的信号机制  # 可以使用  # 在某个  # 回调  # 而不必  # 是一个  # 就会  # 还可以  # 让我们  # 要在  # 这段  # 要做  # 自定义  # 每次都  # 写在  # 又叫  # 就可以  # 一行字  # 内置了  # request_started  # core 


相关文章: 移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  如何打造高效商业网站?建站目的决定转化率  自助网站制作软件,个人如何自助建网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  h5在线制作网站电脑版下载,h5网页制作软件?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  公司网站的制作公司,企业网站制作基本流程有哪些?  江苏网站制作公司有哪些,江苏书法考级官方网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  北京的网站制作公司有哪些,哪个视频网站最好?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  无锡营销型网站制作公司,无锡网选车牌流程?  如何挑选优质建站一级代理提升网站排名?  长沙企业网站制作哪家好,长沙水业集团官方网站?  高防服务器租用如何选择配置与防御等级?  焦点电影公司作品,电影焦点结局是什么?  浅析上传头像示例及其注意事项  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  高端建站三要素:定制模板、企业官网与响应式设计优化  代购小票制作网站有哪些,购物小票的简要说明?  如何用5美元大硬盘VPS安全高效搭建个人网站?  建站之星×万网:智能建站系统+自助建站平台一键生成  如何确保FTP站点访问权限与数据传输安全?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  建站之星代理如何获取技术支持?  湖北网站制作公司有哪些,湖北清能集团官网?  如何配置WinSCP新建站点的密钥验证步骤?  nginx修改上传文件大小限制的方法  网站微信制作软件,如何制作微信链接?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  建站主机系统SEO优化与智能配置核心关键词操作指南  常州企业网站制作公司,全国继续教育网怎么登录?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何在服务器上三步完成建站并提升流量?  寿县云建站:智能SEO优化与多行业模板快速上线指南  公众号网站制作网页,微信公众号怎么制作?  香港网站服务器数量如何影响SEO优化效果?  实例解析angularjs的filter过滤器  建站主机服务器选购指南:轻量应用与VPS配置解析  如何快速登录WAP自助建站平台?  大同网页,大同瑞慈医院官网?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  企业微网站怎么做,公司网站和公众号有什么区别?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站10G流量真的够用吗?如何应对访问高峰?  如何在宝塔面板中创建新站点?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  外汇网站制作流程,如何在工商银行网站上做外汇买卖? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。