`

Django的信号机制

阅读更多

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

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

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

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

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

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

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

  • sender:发送者(如果是pre_save的话,就是model class)
  • instance:实例
  • raw
  • using
  • update_fields

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

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

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

分享到:
评论

相关推荐

    django 信号调度机制详解

    Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。 1、Django内置信号 Model signals pre_init # django的modal执行其构造方法...

    Django的信号机制详解

    Django的信号机制是其框架内的一种解耦合策略,它允许开发者在特定事件发生时触发自定义操作,实现模块间的通信,而无需硬编码这些依赖。这种机制基于观察者模式,也就是发布-订阅模式,使得不同的部分可以独立地...

    django中文开发手册

    - **信号机制**:讲解Django信号机制的工作原理,以及如何使用信号来扩展系统行为。 #### 十五、中间件(第十五章) - **中间件的概念**:介绍中间件的基本概念及其工作流程。 - **自定义中间件**:说明如何编写...

    3分钟看懂Python后端必须知道的Django的信号机制

    首先,理解Django信号机制的三个基本元素: 1. 发送者(Senders):触发信号的实体,通常是Django的某些内建功能或用户自定义的操作。 2. 信号(Signals):实际的信息载体,代表特定事件的发生。 3. 接收者...

    Django 1.6 官方文档

    - **信号**:描述了Django信号机制的工作原理和使用方法。 #### 6. 实用指南 - **使用REMOTE_USER进行认证**:说明了如何通过远程用户认证来控制访问权限。 - **编写自定义django-admin命令**:提供了如何创建...

    Django Documents

    - **信号**:讲解了 Django 信号机制及其应用场景。 ##### 4. “如何做”指南 - **使用 REMOTE_USER 进行认证**:介绍了如何使用 REMOTE_USER 实现认证。 - **编写自定义 django-admin 命令**:教授了如何添加...

    django 1.3 官方手册

    - **信号机制**:介绍了 Django 信号机制的工作原理及其应用场景。 - **废弃功能**:列出了 Django 1.3 版本中不再支持的一些特性。 #### 四、“实战指南” - **身份验证**:提供了一系列针对 Apache 和 REMOTE_...

    Django.rar+框架+项目和应用+模型设计与数据库等全套教程

    Django信号与事件监听 Django缓存机制与性能优化 Django错误处理与调试技巧 Django部署与生产环境配置 Django高级特性:自定义管理后台 Django高级特性:RESTful API开发 Django高级特性:WebSocket与实时通信 ...

    django1.5 开发文档

    - **3.21 信号机制**:讲解了 Django 中信号机制的应用场景和实现方式。 #### 四、“如何做”指南 - **4.1 至 4.13 实战案例**:这一系列章节涵盖了从认证用户到 PDF 输出等各种实用案例,旨在帮助开发者解决实际...

    django在保存图像的同时压缩图像示例代码详解

    #### 四、Django信号机制 **Django信号**是一种异步通信方式,允许某些发送者通知一组接收者已经发生了某个动作。这种机制非常灵活,可以用来扩展Django的核心功能,比如在保存模型之前执行额外的操作。 ##### `pre...

    python web Django

    文档会介绍Django信号的使用。 20. 系统检查框架 系统检查框架可以帮助开发者发现配置和代码中可能存在的问题。文档中会介绍这个框架是如何工作的。 21. 序列化 序列化是指将对象转换为能被存储或传输的格式的过程...

    我的django专栏028阶段的源码,内置信号,自定义信号

    **Django框架与信号机制详解** Django是一个高级的Python Web框架,它鼓励快速开发和清洁、实用的设计。在Django中,信号是处理事件的一种方式,它允许不同的应用程序之间进行松散耦合的通信。在本文中,我们将深入...

    利用信号如何监控Django模型对象字段值的变化详解

    Django信号系统是框架内的一种事件驱动机制,它可以在特定事件发生时触发接收器(receiver)执行某些操作。例如,当模型实例被创建、保存、删除时,都可以触发相应的信号。这对于实现跨模型或跨应用的功能扩展非常...

    深入理解Django-Signals信号量

    Django的信号机制提供了一种方式,使得在特定操作执行前后,如模型保存、删除等,可以触发自定义的行为。这些行为通常由注册的接收器(receiver)函数来执行。Django自身定义了一些常见的信号,例如`request_started...

    django 2.0 官方文档

    - **Signals**: Django的信号机制,允许解耦模型和其他部分的代码。 - **System check framework**: 系统检查框架,用于在开发过程中检查代码问题。 - **External packages**: Django插件和扩展,介绍如何将外部包...

Global site tag (gtag.js) - Google Analytics