代码之家  ›  专栏  ›  技术社区  ›  Paul McMillan

Django1.1测试服务器中多次注册的信号

  •  1
  • Paul McMillan  · 技术社区  · 17 年前

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

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

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

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

    1 回复  |  直到 17 年前
        1
  •  4
  •   Vinay Sajip    17 年前

    的签名 connect 方法是

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

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

    因此,您可以指定 调度程序 在你 连接 打电话来看看是否可以解决问题。