python - 在 django1.1 testserver 中多次注册信号

标签 python django django-models django-signals

我在 models.py 文件中定义了一个信号处理函数。在该文件的底部,我使用 signals.post_save.connect(myhandler, sender=myclass) 按照 http://docs.djangoproject.com/en/dev/topics/signals/ 文档中的建议.

但是,当我运行测试服务器时,简单的打印语句调试显示 models.py 文件被导入了两次(据我所知),这导致我的信号处理程序被注册了两次。这意味着每个 Action 都被处理两次,这显然不是预期的行为。

第一次导入似乎发生在模型检查阶段,第二次导入恰好在服务器处理的第一个请求期间需要模型本身时发生。

我应该在别处注册我的信号处理程序吗?这是 1.1 测试服务器中的错误吗?我还缺少其他东西吗?

最佳答案

connect 方法的签名是

def connect(self, receiver, sender=None, weak=True, dispatch_uid=None)

其中 dispatch_uid 参数是用于唯一标识接收器的特定实例的标识符。这通常是一个字符串,尽管它可以是任何可哈希的。如果接收器具有 dispatch_uid 属性,则如果另一个接收器已存在具有该 dispatch_uid 的接收器将不会被添加。

因此,您可以在 connect 调用中指定一个 dispatch_uid 以查看是否可以消除问题。

关于python - 在 django1.1 testserver 中多次注册信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149317/

相关文章:

python - 使用自然键排除 Django 转储数据中的主键

python - 在 Python 中扫描一组 URL 的最快方法是什么?

python - 如何在 Scrapy Splash 请求中发送自定义 header ?

python - 为什么 round(2.49999999999999992) 返回 3

python - 手机如何知道使用不同的页面?

python - Django 模型字段,如何获取实际值?

python - 特定颜色的 2D 蒙版

python - Django 中的应用名称与旧应用名称冲突

python - Django - 如何在 Django 错误页面中获取 DatabaseError "current transaction is aborted"的调试信息?

django - 如何排除 Django models.Model.save() 中的字段