Django-信号

信号介绍

Django有一个"信号调度器(signal dispatcher)",当框架中的其他地方发生操作时,它可以通知一些解耦的应用程序

官网:信号 | Django 文档 | Django

内置的信号的使用

定义接收器函数

在子应用创建信号.py文件 创建接收器函数

python 复制代码
def my_callback(sender, **kwargs):
  print("Request finished!")

该函数接收一个 sender 参数以及关键字参数 (**kwargs);所有信号处理程序都必须接受这些参数

链接接收器

方法1:使用django.core.signals里面的事件进行链接

python 复制代码
from django.core.signals import request_finished
from .信号 import my_callback

# dispatch_uid 为了防止重复信号,给一个唯一的字符串即可,一般是信号名+接口函数
request_finished.connect(my_callback, dispatch_uid="my_unique_identifier")

方法2:使用装饰器django.dispatch.receiver(signal,**kwargs)

python 复制代码
from django.core.signals import request_finished
from django.dispatch import receiver


@receiver(request_finished,dispatch_uid="my_unique_identifier")
def my_callback(sender, **kwargs):
  print("Request finished!")

严格来说,信号处理和注册的代码可以放在任何地方,最好避免放在应用程序的根目录和 models 模块内以尽量减少导入代码的副作用。


自定义信号

所有的信号都是 django.dispatch.Signal 的实例

python 复制代码
import django.dispatch

from django.dispatch import receiver


pizza_done = django.dispatch.Signal()  # 创建信号


# 定义接收器和链接信号
@receiver(pizza_done)
def my_callback(sender, **kwargs):
  print("Request finished!")


view.py文件中

impor 信号
def index(requsest):
    信号.send(sender='名字')
    return HttpRespone("xxxxx")
相关推荐
爱敲代码的小鱼11 分钟前
springsecurity:
java·开发语言·数据库
秋田君13 分钟前
QT_QT信号与槽机制
开发语言·数据库·qt
DFT计算杂谈1 小时前
vasp如何计算金属的铁电极化强度?
数据库
EterNity_TiMe_1 小时前
别让告警变成噪音:用Prometheus和Alertmanager搭一套可远程查看的监控系统
数据库·人工智能·ai·postgresql·prometheus·cpolar
不超限2 小时前
Postgresql 数据库 自增字段,Vastbase 无效的问题
数据库
阿坤带你走近大数据2 小时前
Oracle新老SQL写法对比
数据库·sql·oracle
努力努力再努力wz3 小时前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
HackTwoHub3 小时前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
Elastic 中国社区官方博客3 小时前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
杨婷1233 小时前
2026 企业微信会话存档服务商选型指南:一维助手方案深度解析
大数据·数据库·企业微信