内置信号 | 自定义信号 | Django开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置信号 | 自定义信号 | Django开发相关的知识,希望对你有一定的参考价值。

.... 信号
1.Django预留的钩子===信号!
    # 使用Django内部定义的信号,在指定位置注入指定操作;
    ==============================================================
    Model signals
        pre_init
        # django的model执行其构造方法前,自动触发
        post_init
        # django的model执行其构造方法后,自动触发
        pre_save
        # django的model对象保存前,自动触发
        post_save
        # django的model对象保存后,自动触发
        pre_save
        # django的model对象那个删除前,自动触发
        post_delete
        # django的model对象删除后,自动触发
        m2m_changed
        # django的model中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发
        class_prepared
        # 程序启动时,检测已注册的app中的model类,对于每一个类,自动触发
    Management signals
        pre_migeate
        # 执行migrate命令前,自动触发
        post_migrate
        # 执行migrate命令后,自动触发
    Request/response_signals
        request_started
        # 请求到来前,自动触发
        request_finished
        # 请求结束后,自动触发
        got_request_exception
        # 请求异常后,自动触发
    Test signals
        setting_changed
        # 使用test测试修改配置文件时,自动触发
        template_rendered
        # 使用test测试渲染模板时,自动触发
    Database Wrappers
        connnetions_created
        # 穿件数据库链接时,自动触发
    ==============================================================
    ------------->> 以上是django内部的几个信号;
    ------------->> 下面是从django中信号需要导入的模块/函数
    ==============================================================
    from django.core.signals import request_finished
    from django.core.signals import request_started
    from djaong.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_changes
    from django.test.signals import template_rendered

    from django.db.backends.signals import connection_created
    ==============================================================
    # 怎么执行这些信号?
    1.在项目目录下创建一个文件:our_signal.py????
       # 这样可不行,django不知道我们建立的文件;
       # 将代码写在项目目录下的__init__.py里面!!!!!!!

    2.__init__.py
        # 自定义一个函数
        def callback(sender, **kwargs):
            print("xxoo_callback")
            print(sender, kwargs)
        # 向django注册/注入这个函数;
        pre_init.connect(callback)
2.自定义信号
    # 自定义的信号怎么让django去触发
    1.定义信号
        import django.dispatch
        pizza_done * django.dispatch.signal(providing_args={"toppongs","size"})
    2.注册信号
        def callback(sender, **kwargs):
            print("自定义信号callback")
            print(sender, **kwargs)

        pizza_done.connect(callback)
3.触发信号
    在视图文件中定义视图函数,将这个__init__文件(相当于项目)下的信号函数导入到视图中;
    from 路径(django_last) import pizza_done
    pizza_done.send(sender="seven", toppings=123, size=456)
    # 自定义信号需要开发者在任意位置触发;
==============================================================

 

以上是关于内置信号 | 自定义信号 | Django开发的主要内容,如果未能解决你的问题,请参考以下文章

Django内置信号

django 自定义信号 1.11

Django 信号 Signals

Python之路70-Django信号

flask_day05:信号 Django信号 flask-script sqlalchemy 创建操作数据表

Django中的信号