Django 信号使用问题:

在使用django内置信号修改新注册的用户密码的时候,发现内置信号没有被触发。百度&官方文档找到了答案

1.信号的函数应该放在哪里?

这段代码应该放在哪里?

严格来说,信号处理和注册的代码应该放在你想要的任何地方,但是推荐避免放在应用的根模块和models模块中,以尽量减少产生导入代码的副作用。

实际上,信号处理函数通常定义在应用相关的signals子模块中。 信号receiver在你应用配置类中的ready()方法中连接。 如果你使用receiver()装饰器,只需要在ready()内部导入signals子模块就可以。

ready()方法会在测试期间执行多次,所以你可能想要保证信号不会重复,尤其是打算在测试中发送它们的情况。

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 信号使用问题的更多相关文章

  1. Django 信号signal

    序言 Django自带一套信号机制来帮助我们在框架的不同应用位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将信号(signals)发送给一组接收者(r ...

  2. 信号(Django信号、Flask信号、Scrapy信号)

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  3. Django信号机制相关解释与示例

    Django 信号# django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发 ...

  4. flask,scrapy,django信号

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  5. pythonのdjango 信号

    一.内置信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Model signals pre_init # d ...

  6. django信号浅谈

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...

  7. django信号

    什么是信号? 信号是在某个操作前或后自动触发一些操作. 信号是通知,是一种状态,相当于在某种状态下发特定的消息 --为了实现代码层解耦 村长博客:http://www.cnblogs.com/legu ...

  8. Django 信号

    信号 Django 提供一个“信号分发器”,允许解耦的应用在框架的其它地方发生操作时会被通知到. 简单来说,信号允许特定的sender通知一组receiver某些操作已经发生. 这在多处代码和同一事件 ...

  9. Django 信号、中间件、i18n 专题

    信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1. Django内置信号 Model signals pr ...

随机推荐

  1. uniapp - emmet

    话说,emment是官方uniapp直接引入的.基本上没做啥修改:可以点这里查看所有用法 - http://emmet.evget.com/ 1.类似css层级写法 1.1 view.ok>vi ...

  2. Dubbo Filter详解

    转载:https://www.jianshu.com/p/c5ebe3e08161 Dubbo的Filter在使用的过程中是我们扩展最频繁的内容,而且Dubbo的很多特性实现也都离不开Filter的工 ...

  3. clickhouse 19.14.m.n简单测试

    ClickHouse is a column-oriented database management system (DBMS) for online analytical processing o ...

  4. 什么时候会进行 SpringMVC重定向保存参数(FlashMap)?

    SpringMVC重定向保存参数(FlashMap):两种情况会保存参数:    1. 当前视图为RedirectView,也即是说当前请求为重定向请求.        org.springframe ...

  5. Mysql 查询一个月当前时间一个月之前的数据

    sql: AND date_format(createDTM, MONTH),'%Y-%m-%d')

  6. bilibili投屏到电脑

    bilibili投屏到TV B栈上有丰富的视频资源,电视盒子小米,自带匹配的投屏功能. 但是如何将哔哩哔哩投屏到电脑上? bilibili投屏到PC上 万能的知乎给出了答案. https://www. ...

  7. Office2019 Word 新建文档豆沙绿背景色失效零时解决方案

    如果只针对Word的话,可以尝试在开发者选项卡中新建一个宏,复制下面的内容进行运行: Sub WritingLayout() ActiveDocument.Background.Fill.Visibl ...

  8. Photoshop 7.0 安装及注册方法

    参照:https://jingyan.baidu.com/article/e75057f2e51ac9ebc91a8989.html

  9. 超详尽-QThread的正确使用姿势-以及信号槽的跨线程使用

    贴上两篇博文 一.http://www.cnblogs.com/findumars/p/5031239.html 循序渐进介绍了,怎样正确的让槽函数工作在子线程中. 同时介绍了信号槽的绑定与线程的关系 ...

  10. Angular 修改路由策略,改为使用hash路由,即带#号URL

    修改app.module.ts如下