Django的信号机制
何为Django的信号机制?
在了解信号机制之前,对"信号"概念作一解释:
信号是表示消息的物理量,信号是运载消息的工具,是消息的载体。<具体关注百度百科《信号》>
在Django项目中提供了信号机制: 在对某一些动作发生时,触发信号,于是监听者自动调度执行相关函数对信号进行处理。
Django自定义信号分为4步:
所有信号都是 django.core.signals.Signal的实例。 providing_args是一个列表,由信号将提供给监听者的参数名称组成。
## 测试自定义信号可在子应用的同级的__init__文件下进行假定,处于测试
1 from django.core.signals import Signal 2 # 1. 定义邮件发送信号 3 email_send = Signal(providing_args=['email'])
2. 信号处理函数的定义
信号处理函数一般定义在定义在子应用下的signals.py文件中。
## 于是在子应用下新建一个signals.py文件
1 # 2. 处理函数定义 2 def send_email(sender, **kwargs): 3 """email_send信号处理函数""" 4 # TODO: 可以在这里编写信号的处理代码 5 print('email_send信号处理函数被调用')
3. 信号的连接
信号连接就是将信号和处理函数对应起来,信号连接一般是在子应用配置类的ready方法中进行操作。
## 一般来说在创建子应用下的app.py文件下的AppConfig类进行补充ready方法来做启动项目。
1 class TestAppConfig(object): 2 # ... 3 def ready(self): 4 # 3. 信号连接 5 email_send.connect(send_email)
注:子应用配置类中的
ready方法在django启动时会被调用。

## AppConfig类中补充了ready方法,便于使用者重写方法!!

4. 信号发送
发出信号之后,信号连接的处理函数就会被调用。
email_send.send(sender='信号发出者', **kwargs)
5. 实验结果


==> 注意事项:
1. 需要在配置项中进行注册<测试应用>, 如笔者注册的<users>进行注册在INSTALLED_APPS中"users.apps.UsersConfig";
2. 需要注意切莫写成“users”,因为添加了ready的方法,所以需要对整个UsersConfig进行配置

日积月累,小小的力量,大大的梦想...

浙公网安备 33010602011771号