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小时内与您取得联系。