django信号
一. django 内置信号
1. 内置信号列举
Model signals
pre_init # model执行构造方法前,触发
post_init # model执行构造方法后,触发
pre_save # model执行save对象保存前,触发
post_save # model执行save对象保存前,触发
pre_delete # model执行delete对象删除前,触发
post_delete # model执行delete对象删除前,触发
m2m_changed # model使用多对多字段操作第三张表前后,触发
class_prepared # 程序启动时,检测已注册的model类,对每个类,触发
Management signals
pre_migrate # 执行migrate前,触发
post_migrate # 执行migrate后,触发
Request/response signals
request_started # 请求到来前,触发
request_finished # 请求结束后,触发
got_request_exception # 请求异常后,触发
Test signals
setting_changed # 使用test测试修改配置文件,触发
template_rendered # 使用test测试渲染模板时,触发
Database Wrappers
connection_created # 创建数据库连接时,触发
2. 内置信号使用
必须保证下面编写的代码被执行
确保文件被执行
# apps.py
from django.apps import AppConfig
class TextConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'text'
# 加入如下代码
def ready(self):
import text.common_signal
2.1 方式一:receiver 装饰器
# 自定义 py 文件 : common_signal.py
from django.db.models.signals import pre_save
from django.dispatch import receiver
from myapp.models import MyModel
@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
...
这里写你的代码逻辑
2.2 方式一:
# 自定义 py 文件 : common_signal.py
from django.db.models.signals import post_save
from myapp.models import MyModel
def my_handler(sender, **kwargs):
print(sender)
print('信号执行了12')
post_save.connect(my_handler, MyModel)

浙公网安备 33010602011771号