我有一个基于django的函数,当应用程序启动时,需要在Django中只运行一次。棘手的部分是:
makemigrations
或shell
时触发它。AppConfig.ready()
方法中的某个地方运行,但它仍然可以在所有管理命令中运行。
由于应用程序打包在Docker中,我一直在考虑简单地将代码包装在单独的管理命令中,并在应用程序启动之前在入口点运行它。这似乎可以解决问题,但它只能在那个特定的容器中自动 - 如果有人运行本地开发服务器来自己处理应用程序,他可能不知道另外一个命令应该运行。
我搜索了文档,看起来Django本身并没有办法自己做这个。也许有一种我无法想到的更好的方法?
答案 0 :(得分:0)
我有完全相同的需求。我在AppConfig.ready()
中运行启动代码,具体取决于您不希望执行启动代码时必须设置的环境变量。
SKIP_STARTUP = settings.DEBUG or os.environ.get('SKIP_STARTUP')
class myapp(AppConfig):
def ready(self):
if not SKIP_STARTUP:
<startup stuff>