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)
posted @ 2024-07-02 11:29  codegjj  阅读(14)  评论(0)    收藏  举报