美文网首页
Django信号触发

Django信号触发

作者: 千沙qiansha | 来源:发表于2020-09-28 09:10 被阅读0次

    编写的信号总是不能触发。信号触发主要需要三个条件:

    1.信号能正常工作

    2.在app的config中触发信号

    3.在settings中使用自定义的AppConfig

    1,编写signals

    在app目录下新建signals.py,内容大致如下:
    
    from datetime import datetime
    from django.dispatch import receiver
    from django.db.models.signals import post_save
    from testapp.models import TestModel
    
    
    @receiver(post_save, sender=TestModel)
    def test_action(sender, instance, created, **kwargs):
        time_now = datetime.now()
        if created:
            print("do something")
        else:
            print("do other thing")
    

    2, 编写 AppConfig

    位于app目录下 apps.py,代码大致如下:

    from django.apps import AppConfig
    ​
    ​
    class TestappConfig(AppConfig):
        name = 'testapp'
    ​
        # 自己实现ready方法
        def ready(self):
            from . import signals  # signals文件为编写的signal所在的文件
            super(TestappConfig, self).ready()
    ​
    

    3, 在settings.py中修改INSTALL_APPS代码如下:

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'rest_framework',
        'corsheaders',  # 跨域
        'django_filters',
        # 默认情况下我们通常叫做testapp,但是因为信号需要在自定义的AppConfig中触发,因此必须把
        # testapp修改为 testapp.apps.TestappConfig,这样才能触发信号
        'testapp.apps.TestappConfig',
    ]
    

    相关文章

      网友评论

          本文标题:Django信号触发

          本文链接:https://www.haomeiwen.com/subject/wctduktx.html