Django中的内置信号有哪些[Django框架]

Django中提供了“信号调度”,用于在框架执行操作时解耦。通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者。

Django内置信号

Model signals

    pre_init                    # django的modal执行其构造方法前,自动触发

    post_init                   # django的modal执行其构造方法后,自动触发

    pre_save                    # django的modal对象保存前,自动触发

    post_save                   # django的modal对象保存后,自动触发

    pre_delete                  # django的modal对象删除前,自动触发

    post_delete                 # django的modal对象删除后,自动触发

    m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发

    class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发

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          # 创建数据库连接时,自动触发

相关推荐:《Python相关教程》

应用示例:

在Django主目录下新建一个sg.py

from django.core.signals import request_finished

from django.core.signals import request_started

from django.core.signals import got_request_exception

 

from django.db.models.signals import class_prepared

from django.db.models.signals import pre_init, post_init

from django.db.models.signals import pre_save, post_save

from django.db.models.signals import pre_delete, post_delete

from django.db.models.signals import m2m_changed

from django.db.models.signals import pre_migrate, post_migrate

 

from django.test.signals import setting_changed

from django.test.signals import template_rendered

 

from django.db.backends.signals import connection_created

 

def signal_test(sender, **kwargs):

    print("test pre_init")

 

pre_init.connect(signal_test)

然后在Django的相同目录的__init__.py 加入  import sg.py  跟注册mysql数据库一样,这样初始化Django程序的时候就能导入sg包

views.py

def sg(request):

    obj = models.Business(name='滴滴')

    print("obj1")

    obj.save()

 

    obj = models.Business(name='滴滴1')

    obj.save()

 

    obj1 = models.Business(name='滴滴2')

    obj1.save()

    return HttpResponse('sg')

输出结果:每次在保存记录钱都会先执行信号。

qq.jpg

解析:为什么在obj.save()前可以触发pre_init这个信号呢?因为查看save的源码,里面留了这样一个钩子,致使可以找到这个singal然后send触发,通过这个原理,我们就可以自定义信号。

1562038209769959.jpg

相关推荐:

Django中的模型信号有哪些

以上是 Django中的内置信号有哪些[Django框架] 的全部内容, 来源链接: utcz.com/z/539595.html

回到顶部