• 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 # 创建数据库连接时,自动触发
    使用信号第一步,写一个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)

    xxoo.connect(callback) # 这里xxoo代指以上导入的信号,
    pre_init.connect(callback) # 指构造方法执行之前,执行callback 函数

    第二步:在project的init.py文件中导入此信号的py 文件,这样在数据库操作前就会触发信号的函数

    举例:
    第一步:
    在项目下创建sig.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)
    
    pre_init.connect(callback) # 指构造方法执行之前,执行callback 函数
    View Code

    第二部:将此信号文件写入应用的init.py文件中,当项目启动时候,会自动触发此信号文件

    import  sig

    这样当前项目中所有执行构造方法之前都会执行此信号函数

    自定义信号分三步:
    第1步:创建自定义信号
    import django.dispatch
    pizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])
    toppings,size 这2个就是触发者在触发的时候传入的2个参数
    第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)
  • 相关阅读:
    memory addresses
    ddt ddl dml
    PHP Architecture
    disk_free_space
    SAPI
    Simple Mail Transfer Protocol
    AllowOverride None
    function &w(){}
    The History of Operating Systems
    are not called implicitly
  • 原文地址:https://www.cnblogs.com/zy6103/p/8025307.html
Copyright © 2020-2023  润新知