Day085 django 信号

本文详细介绍了Django框架中的信号机制,包括信号的概述、内置信号、如何定义信号、接收器的创建与注册、信号的断开连接、发送信号的方式以及在项目中的实际应用。通过信号,开发者可以在特定事件发生时,实现不同组件之间的通信,如模型的保存、删除等生命周期事件。
摘要由CSDN通过智能技术生成

django的signals

1、概述

​ 信号可以在框架中的其他位置发生操作时通知分离的应用程序,简而言之,就是信号允许特定的sender通知一组receiver某些操作已经发生,这在多处代码和同一事件有关联的情况下很有用。

2、内置信号

内置信号的完整文档:docs.djangoproject.com/

模型层中定义的内置信号,在 django.db.models.signals 模块中:

  1. pre_init:实例化模型时,此信号在模型的__init__()方法的开头发送

此信号发送的参数:

  • instance:模型类
  • args:模型初始化的位置参数
  • kwargs:模型初始化的关键字参数
  • post_init:和pre_init一样,但是这个__init__()方法在方法完成时发送

此信号发送的参数:

  • instance:刚刚初始化完成的模型实例
  • pre_save:在模型 save()方法开始时发送
  • post_save:在模型 save()方法完成时发送
  • pre_delete:在模型 delete()方法开始时发送
  • post_delete:在模型 delete()方法结束时发送
  • m2m_changed:多对多关系中,模型更改时发送

对web请求,也有内置信号,在 django.core.signals 模块中

  1. request_started:Django开始处理HTTP请求时发送
  2. request_finished:当Django完成向客户端发送HTTP响应时发送

3、定义信号

所有的信号都是django.dispatch.Signal实例

初始化参数:providing_args=None, use_caching=False

  • providing_args:信号将为sender提供的参数名称列表
  • use_caching:默认为False,是否使用缓存,设置为True,会为每个sender对应的接收器进行缓存(保存到sender_receivers_cache),调用 .connect() 或 .disconnect() 后会清除缓存。内置信号基本都设置为True

示例:

        from django import dispatch

pizza_done = dispatch.Signal(providing_args=["toppings", "size"])
      

4、接收器receiver

接收器可以是任何python函数或方法,参数最少必须是:sender, **kwargs,示例如下:

        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值