返回顶部
首页 > 资讯 > 后端开发 > Python >Django的信号机制详解
  • 140
分享到

Django的信号机制详解

详解信号机制 2022-06-04 18:06:16 140人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。 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也支持用户 自定义 一些信号。

--结束END--

本文标题: Django的信号机制详解

本文链接: https://lsjlt.com/news/13295.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Django的信号机制详解
    Django提供一种信号机制。其实就是观察者模式,又叫发布-订阅(Publish/Subscribe) 。当发生一些动作的时候,发出信号,然后监听了这个信号的函数就会执行。 Django内置了一些信号,比如...
    99+
    2022-06-04
    详解 信号 机制
  • 深入理解Django的信号机制
    目录Django的信号Django信号的使用自定义信号扩展:查看Django信号的接受者扩展:Django内置信号Django的信号 Django的信号机制不同于Linux的信号机制...
    99+
    2023-02-08
    Django 信号机制
  • Django的signal信号机制如何使用
    本文小编为大家详细介绍“Django的signal信号机制如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Django的signal信号机制如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • PyQt5信号与槽机制案例详解
    信号和槽机制是 QT 的核心机制,要精通 QT 编程就必须对信号和槽有所了解。信号和槽是一种高级接口,应用于对象之间的通信,它是 QT 的核心特性,也是 QT 区别于其它工具包的重要...
    99+
    2024-04-02
  • 详解Python的Flask框架中的signals信号机制
    Flask 提供了信号(Signals)功能,是一种消息分发机制。类似于钩子(Hooks)。使用信号功能可以降低程序的耦合,分解复杂的业务模型。例如在更新了产品数据后,可以发送一个信号。当有需要对产品数据进...
    99+
    2022-06-04
    详解 框架 信号
  • linux信号解释(3)--信号处理机制
        如果需要进程捕获某个信号,并作出相应的处理,就需要注册信号处理函数(其实就是内核里需要识别信号函数,类似C语言里的include某函数库)。    处理信号就类似软中断,内核为每个进程准备了一段信号向量表,记录信号的处理机制。当某个...
    99+
    2023-01-31
    信号处理 信号 机制
  • 「信号机制」Python信号处理—sig
    转载请注明出处:https://blog.csdn.net/jinixin/article/details/80383177   本文是信号机制三篇记录中的第二篇,介绍Python语言中负责信号处理的signal模块,并会给出一些小dem...
    99+
    2023-01-31
    信号处理 信号 机制
  • ECF机制:信号 (Signal)
        💭 写在前面:ECF (异常控制流) 机制是存在于系统的所有层级中的,所以这一块的知识我们需要系统地去学习。前几章我们探讨过了异常 (Exceptions),由硬件触发,在内核代码中处理。讲解了进程的上下文切换 (...
    99+
    2023-09-06
    linux 运维 服务器 操作系统
  • 深入理解Qt信号槽机制
    目录1. 信号和槽概述1.1 信号的本质1.2 槽的本质1.3 信号和槽的关系1. 信号和槽概述 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式(发布-订阅模...
    99+
    2024-04-02
  • 浅谈Linux信号机制
    目录一、信号列表1.1、实时信号非实时信号1.2、信号状态1.3、信号生命周期1.4、信号的执行和注销二、信号掩码和信号处理函数的继承2.1、信号处理函数的继承2.2、信号掩码的继承2.3、sigwait 与多线程2...
    99+
    2022-06-03
    Linux 信号机制
  • C语言中的线程信号控制详解
    目录一、场景介绍二、解决方法1、临时线程2、全局变量信号3、信号量一、场景介绍 存在三个线程,一个主线程和两个子线程(子线程数量不固定)。为了节省频繁创建销毁线程造成的资源浪费,将这...
    99+
    2023-02-03
    C语言 线程 信号控制 C语言 信号控制 C语言线程
  • 详解java中的互斥锁信号量和多线程等待机制
    互斥锁和信号量都是操作系统中为并发编程设计基本概念,互斥锁和信号量的概念上的不同在于,对于同一个资源,互斥锁只有0和1 的概念,而信号量不止于此。也就是说,信号量可以使资源同时被多个线程访问,而互斥锁同时只能被一个线程访问互斥锁在java中...
    99+
    2023-05-31
    java 互斥锁 信号量
  • Linux信号机制是什么
    Linux信号机制是一种用于进程间通信的机制,用于在进程之间传递异步事件的通知。当某个进程接收到一个信号时,它可以选择忽略、捕获或默...
    99+
    2023-08-12
    Linux
  • Android AIDL——进程通信机制详解
    Android  AIDL, Android进程机制通信机制,这里就整理下AIDL 的知识,帮助大家学习理解此部分知识! 什么是 AIDL AIDL 全称 Andr...
    99+
    2022-06-06
    进程 aidl 通信 Android
  • 正确的理解和使用Django信号(Signals)
    目录Django信号的一个简单例子利用Django信号实现不同模型的联动更新Django常用内置信号如何正确放置Django信号的监听函数代码 小结Django 提供一个了“信号分发...
    99+
    2024-04-02
  • 微信小程序的运行机制与安全机制解决方案详解
    目录了解小程序的由来小程序与普通网页开发的区别小程序运行机制小程序更新机制小程序安全1.反编译2.接口鉴权3.代码管理4.内容安全5.敏感数据安全小程序双线程架构为什么要选择双线程架...
    99+
    2023-02-09
    小程序的运行机制 小程序的安全机制
  • python Django的显示个人信息详解
    目录用命令创建Django项目1.将磁盘切换为D盘2.在D盘的路径下创建Django项目3.最后显示新建index文件夹启动项目1.输入以下命令启动项目2.在浏览器中输入http:/...
    99+
    2024-04-02
  • Ruby信号处理详解
    Ruby使用Process.kill发送信号 Process.kill(signal, pid, ...) → integer Process.kill发送指定的信号给一个或多个进程...
    99+
    2024-04-02
  • Linux信号机制的基础知识介绍
    本篇内容介绍了“Linux信号机制的基础知识介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux进程基础一文中已经提到,Linux以...
    99+
    2023-06-13
  • Python制作微信机器人教程详解
    目录一、环境配置二、登录三、 第一个简单的消息发送监控四、指定某个微信好友发送消息五、所有微信群监控六、公众号监听七、定时发送消息八、微信智能聊天机器人一、环境配置 大多数人无法登录...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作