zoukankan      html  css  js  c++  java
  • django中信号

    # 信号的理解
    在某个行为进行的某个阶段给这个行为添加一个附带的行为
    
    # 相关api
    ## 数据表
    pre_init  # django的model执行其构造方法前,自动触发
    post_init  # django的model执行其构造方法后,自动触发
    pre_save  # djangod的model对象保存前,自动触发
    post_save  # django的model对象保存后,自动触发
    pre_delete  # django的model对象删除前,自动触发
    post_delete  # django的model对象删除后,自动触发
    m2m_changed  # django的model中使用m2m字段操作第三表(add,remove,clear)前后,自动触发
    class_prepared  # 程序启动时,检测已注册的app中的model类,对于每一个类,自动触发
    
    ## migrate命令
    pre_migrate   # 执行migrate前,触发
    post_migrate  # 执行migrate后,触发
    
    ## url请求相关
    request_started  # 请求到来前,触发
    request_finished  # 请求结束后,触发
    got_request_exception  # 请求异常后,触发
    
    ## 测试
    setting_changed  # 使用test测试修改配置文件,触发
    template_rendered  # 使用test测试渲染模板时,触发
    
    ## 数据库
    connection_created  # 创建数据库连接时,触发
    
    # 实际应用
    from django.db.models.signals import pre_save
    from django.dispatch import receiver
    @receiver(pre_save)
    def do_something(sender, **kwargs):
        print("i'am doing it now!")
        
    上面例子通过receiver装饰器将do_something函数添加到了sender对象在保存之前必须做的事情的清单里面,也就是说任何一个sender对象在被保存进数据库之前肯定会在后台打印一句i'am doing it now!
    可能这里对sender具体指的谁不是很明确,这里明确强调下,如果receiver装饰器中没有额外对sender参数进行声明,sender代表当前app下的所有数据模型
    既然说了receiver中也可以指定参数,那就是说信号也是可以针对某些具体的数据模型进行信号接受的
    from django.db.models.signals import pre_save
    from django.dispatch import receiver
    from myapp.models import MyModel
    
    @receiver(pre_save, sender=MyModel)  # pre_save指定信号触发类型,sender指定只有MyModel模型发出的信号会被receiver接受并运行下面逻辑
    def my_handler(sender, **kwargs):
        ...
    
  • 相关阅读:
    2016"百度之星"
    ZOJ 3703 Happy Programming Contest(01背包的灵活运用)
    LA 3942 Remember the Word (Trie树)
    ZOJ 3700 Ever Dream(Vector)
    Hdoj 1686 Oulipo
    2017总结,2018计划
    Ubuntu16.04 + caffe-ssd + [CPU_ONLY] + KITTI 训练总结
    【转载】The Elements of Programming Style之代码风格金科玉律
    qt中setStyleSheet导致的内存泄漏
    【转】用枚举定义有意义的数组下标
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/15609025.html
Copyright © 2011-2022 走看看