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)  #触发信号的内容,这样就可以在任意位置触发自己定制的信号了

 

posted @ 2017-09-21 16:21  mx轩  阅读(131)  评论(0编辑  收藏  举报