zoukankan      html  css  js  c++  java
  • django内置信号

    一、ajango内置信号

      1、Django内置信号   
        Model signals
              pre_init                    # django的modal执行其构造方法前(model中的class类执行前),自动触发
              post_init                   # django的modal执行其构造方法后(model中的class类执行后),自动触发
              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          # 创建数据库连接时,自动触发

      2、注册Django内置信号  (由于是注册信号必须在程序启动之前应该就已经注册好了所以应该吧注册代码存放在程序目录的__init__.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 callback(sender, **kwargs):    
            print("xxoo_callback")
            print(sender,kwargs)  #sender内保存的就是那个位置的文件触发的信号,kwargs表示触发信号的具体操作
        xxoo.connect(callback)
        # xxoo指上述导入的信号,当信号一触发就会执行callback函数
    

     二、自定义内置信号

      1、在文件中自定义一个信号

    import django.dispatch
    pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])

      2、注册信号

    def callback(sender, **kwargs):
        print("callback")
        print(sender,kwargs)
     
    pizza_done.connect(callback)

      3、触发信号

    from 路径 import pizza_done    #导入注册信号的路径,所有该信号可以放在任意的文件中
     
    pizza_done.send(sender='seven',toppings=123, size=456)  #触发信号的内容,这样就可以在任意位置触发自己定制的信号了
    
  • 相关阅读:
    laravel5.1框架简介及安装
    数据结构之队列定义及基本操作实现
    PHP之闭包详解
    数据结构之栈定义及基本操作实现
    PHP之MVC微型框架简单搭建
    对web应用中单一入口模式的理解及php实现
    php面向对象编程学习之高级特性
    数据结构之链表定义及基本操作实现
    数据结构之数组定义及基本操作
    感悟
  • 原文地址:https://www.cnblogs.com/xuanan/p/7569207.html
Copyright © 2011-2022 走看看