Django 信号使用问题
Django 信号使用问题:
在使用django内置信号修改新注册的用户密码的时候,发现内置信号没有被触发。百度&官方文档找到了答案
1.信号的函数应该放在哪里?
这段代码应该放在哪里?
严格来说,信号处理和注册的代码应该放在你想要的任何地方,但是推荐避免放在应用的根模块和
models
模块中,以尽量减少产生导入代码的副作用。实际上,信号处理函数通常定义在应用相关的
signals
子模块中。 信号receiver在你应用配置类中的ready()
方法中连接。 如果你使用receiver()
装饰器,只需要在ready()
内部导入signals
子模块就可以。注
2.为什么没有触发?
信号触发主要需要三个条件:
1.信号能正常工作
2.在app的config中触发信号
3.在settings中使用自定义的AppConfig
编写signals
代码如下signals.py,django对于信号推荐位置的是:app所在目录下新建名为signals.py的文件
from django.db.models.signals import post_delete
from django.dispatch import receiver
from device.models import Device # replace with your Model
@receiver(post_delete, sender=Device, weak=False)
def delete_comment_after(sender):
print('device delete')
print(sender)
- 编写 AppConfig,位于 app下 apps.py,代码如下:
from django.apps import AppConfig
class DeviceConfig(AppConfig):
name = 'device'
verbose_name = '设备'
def ready(self):
import device.signals
在settings.py中修改INSTALL_APPS代码如下:
INSTALLED_APPS = [
...
'device' ---> 'device.apps.DeviceConfig'
'device.apps.DeviceConfig',
默认情况下我们通常叫做device,但是因为信号需要在自定义的AppConfig中触发,因此必须把
device修改为 device.apps.DeviceConfig,这样才能触发信号
...
]
Django 信号使用问题的更多相关文章
- Django 信号signal
序言 Django自带一套信号机制来帮助我们在框架的不同应用位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将信号(signals)发送给一组接收者(r ...
- 信号(Django信号、Flask信号、Scrapy信号)
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- Django信号机制相关解释与示例
Django 信号# django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发 ...
- flask,scrapy,django信号
简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...
- pythonのdjango 信号
一.内置信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Model signals pre_init # d ...
- django信号浅谈
Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...
- django信号
什么是信号? 信号是在某个操作前或后自动触发一些操作. 信号是通知,是一种状态,相当于在某种状态下发特定的消息 --为了实现代码层解耦 村长博客:http://www.cnblogs.com/legu ...
- Django 信号
信号 Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到. 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生. 这在多处代码和同一事件 ...
- Django 信号、中间件、i18n 专题
信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1. Django内置信号 Model signals pr ...
随机推荐
- How to Install Ruby on CentOS/RHEL 7/6
How to Install Ruby on CentOS/RHEL 7/6 . Ruby is a dynamic, object-oriented programming language foc ...
- Spring使用多个 <context:property-placeholder/>
Spring中报"Could not resolve placeholder"的解决方案(引入多个properties文件) 解决方案: (1) 在Spring 3.0中,可以写: ...
- JSON字符串转实体对象
JSON转实体两种方式 代码片段 ; i < dt.Rows.Count; i++) { //Json字符串 string designJson = dt.Rows[i]["Desig ...
- python while 1 然后pass会发生什么?
下面的代码,会使32核linux服务器志强e5的cpu使用率达到3200%,然后别的什么程序都跑不了. 如果windows,cpu使用率会达到100%.这是计算方式有点区别. 个人计算机,除非你是8路 ...
- k8s记录-kubectl常用命令
kubectl kubectl annotate – 更新资源的注解.kubectl api-versions – 以“组/版本”的格式输出服务端支持的API版本.kubectl apply – 通过 ...
- k8s记录-node组件部署(十)
1)CA 证书配置登录 192.168.0.1 app 用户下cd ssl/kubernetes#注意修改 KUBE_HOME,BOOTSTRAP_TOKEN #与 3.5 3)token 一致,KU ...
- linux python 安装 pymssql
其实也不是很完整的. 我主要在dockers中的alpine linux 下进行开发. 这里主要说的就是如何在alpine下安装pymssql 多级依赖 pymssq 依赖 Cython , Cyth ...
- [转]casperjs截图出现黑色背景
原文地址:https://my.oschina.net/tuxpy/blog/879509?utm_medium=referral 如果默认没有指定 body的background-color就会出现 ...
- WeQuant教程—1.4 实践教学:比特币量化定投
在wequant.io,为了让读者能直接体验量化系统的魅力,我们用前面的思路,实现了一套完整的量化系统和回测工具,这个系统非常简单,用户只需要把交易意志用策略表达出来,系统就可以自己完成交易效果的回 ...
- 百度AI身份证识别demo,使用js提交图片数据
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...