信号
自定义信号
-
定义信号
import django.dispatch # 自定义信号 cut_info_signal = django.dispatch.Signal()
-
注册回调
from utils.signals import cut_info_signal def callback_1(sender, **kwargs): print("callback-1") def callback_2(sender, **kwargs): print("callback-2") cut_info_signal.connect(callback_1) cut_info_signal.connect(callback_2)
-
触发信号
from utils.signals import cut_info_signal cut_info_signal.send("demo")
将某些动作都注册在一个信号中,一旦达到条件则触发信号(所有回调都执行)。
内置信号
Model signals
pre_init # django的Model执行其构造方法前,自动触发
post_init # django的Model执行其构造方法后,自动触发
pre_save # django的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类,对于每一个类,自动触发
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 # 创建数据库连接时,自动触发
-
注册信号回调
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") post_save.connect(callback) # 例如:插入一条数据,如何进行日志记录?
-
触发信号
from app01 import models def demo(request): models.NewBB.objects.create(name='v1') return HttpResponse("ok")
本文作者:Sherwin
本文链接:https://www.cnblogs.com/sherwin1995/p/17180127.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步