Django app初始化代码(如连接信号)

时间:2010-01-19 16:44:22

标签: python django

我需要一个地方来运行特定于应用程序的初始化代码(比如连接到信号)。 当我将代码放到应用程序的__init__.py模块时,我最终导致模型的循环导入。

有没有办法在框架设置时和执行任何请求之前触发函数?

我使用相当旧版本的django 96.6,但我也对当前版本的解决方案感兴趣。

关于其他问题的重复: 以下是问题与S.Lott在评论中建议的重复内容的不同之处:

对当前解决方案的评论 我不能使用网址,因为我的大多数应用都没有暴露任何网址。他们只是收听信号并在数据库中存储其他信息。

4 个答案:

答案 0 :(得分:5)

建议将信号放在应用的models.py中。

尝试使用models.py或urls.py,如果您有任何运气,请告知我们。

答案 1 :(得分:5)

像这样的东西最好的地方......在任何地方,只需将它导入你的urls.py文件中(显然原因是在任何请求之前加载urls)。

答案 2 :(得分:2)

如果你不提供网址,那么你真的需要把它放在models.py中,就像它一样。

现在,关于你的问题:你想在自己的模块中定义它,很棒,做到这一点。要避免循环导入,请使用django.db.models.get_model为您动态返回模型。您可以为信号模块提供初始化功能,以导入相关模型并连接相关信号。然后在models.py结束时调用此函数,只在模型初始化后运行一次。

这仍然有可能无法正常工作(如果模型在设置时尚未准备就绪),请试一试并告诉我们。

答案 3 :(得分:0)

对我而言,以下作品:

init .py:

from . import models
from . import signals

signals.py从模型导入,但反之亦然。 signals.py包含在导入时立即运行的模块代码,因此在django服务器启动时运行。