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 ...
随机推荐
- SpringBoot——Profile多环境支持
1.多profile文件形式 主配置文件编写时, 文件名可以是application-{profile}.properties/yml 默认使用的application.properties的配置. ...
- 笔记-Git:资源列表
ylbtech-笔记-Git:资源列表 Yahoo!, Facebook, Salesforce, Microsoft, Twitter, Deutsche Telekom, Intuit, Mozi ...
- 如何用 Go 实现热重启
热重启 热重启(Zero Downtime),指新老进程无缝切换,在替换过程中可保持对 client 的服务. 原理 父进程监听重启信号 在收到重启信号后,父进程调用 fork ,同时传递 socke ...
- linux zip命令 tar命令 【压缩、解压缩】参数列表:
linux zip命令参数列表: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面 -m 将文件压缩之后,删除源文件 -n 特定字符串 不压缩具有特定字尾字符串 ...
- Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: ...
- visual studio 2019 error MSB3073 exited with code 1
在用vs2019编译C++工程时,出现错误. 原因是设置的命令没有运行成功,需要将这条命令关闭.不编译就行了. 解决方法,打开property manager,打开property pages,将其中 ...
- 爬虫相关-scrapy框架介绍
性能相关-进程.线程.协程 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. 串行执行 import requests def fetc ...
- MySQL高效分页-mybatis插件PageHelper改进
MySQL分页在表比较大的时候,分页就会出现性能问题,MySQL的分页逻辑如下:比如select * from user limit 100000,10 它是先执行select * from user ...
- [转]Nodejs利用phantom 将html生成图片
原文地址:https://www.jianshu.com/p/8679f469e8d6 不过下载起来比较麻烦. 需要手动下载,然后将其添加到PATH中. 下载链接: https://sl-m-ssl. ...
- vim设定Tab缩进长度
在Linux系统中,vim是一款非常好用的文本编辑器,那么,如何在Linux下的vim编辑器设定Tab的缩进长度呢? Linux系统下,vim编辑器Tab键的默认长度为8个空格,在vim中可以通过修改 ...