内置信号 | 自定义信号 | 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开发的主要内容,如果未能解决你的问题,请参考以下文章