django存在一个’信号调度程序’, 可以实现当某事件在框架内发生时,通知到我们的应用程序。比如当某个时间(event)发生时允许若干寄件人(sender)通知一组接受者(receivers)
Django includes a “signal dispatcher” which helps allow decoupled applications get notified when actions occur elsewhere in the framework. In a nutshell, signals allow certain senders to notify a set of receivers that some action has taken place. They’re especially useful when many pieces of code may be interested in the same events.
具体比如, 当某个用户被创建后, 会通知某个程序, 创建一个token, 类似于mysql触发器.
Model signals可以分为一下几种:
pre_init 某个实例马上要初始化了
post_init 某个实例已经初始化了
pre_save 个实例即将要保存入库了
post_save 某个实例即已经保存入库了
pre_delete 某个实例即将要删除了
post_delete 某个实例即已经删除了
class_prepared 某个class准备好了
m2m_changed 模型的ManyToManyField改变时触发
使用:
场景1: 创建用户后加密密码(因某种原因存入数据库的是明文)
- 在apps/user下新建
signals.py
from django.contrib.auth import get_