我在 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/