Django信号(Signals)是一种允许应用组件在特定事件发生时进行通信的机制,而不必直接引用彼此。它遵循观察者模式,允许发送者(如模型实例的保存或删除)发送信号,而接收者(信号处理器)可以监听这些信号并作出响应,从而实现松耦合的组件间通信。
Django内置信号
模型(Model)相关的信号
- pre_init:在Django模型实例化其构造方法之前触发。
- post_init:在Django模型实例化其构造方法之后触发。
- pre_save:在Django模型对象保存到数据库之前触发。
- post_save:在Django模型对象保存到数据库之后触发,无论对象是新建还是更新。
- pre_delete:在Django模型对象从数据库中删除之前触发。
- post_delete:在Django模型对象从数据库中删除之后触发。
- m2m_changed:在使用Many-to-Many字段进行添加、移除或清空操作前后触发。
- class_prepared:当Django发现并准备使用已注册应用中的模型类时触发。
数据库迁移相关的信号
- pre_migrate:执行migrate命令前触发。
- post_migrate:执行migrate命令后触发。
请求和响应相关的信号
- request_started 和 request_finished:分别在Django开始处理HTTP请求和完成请求处理后触发。
- got_request_exception:当视图函数中抛出异常时触发。
测试相关的信号
- Test signals:在测试运行的不同阶段触发,用于测试环境的设置或清理等。
其他信号
- setting_changed:当Django设置在运行时被更改时触发。
- template_rendered:模板渲染完成后触发,可用于模板调试。
使用场景
- 日志记录:在模型保存或删除时自动记