Django:在devserver启动时执行一些代码

Django:在devserver启动时执行一些代码,django,Django,我需要在devserver启动时执行一些代码 目前,我只是将代码放入我的一个应用程序中的models.py 此解决方案有一个副作用:代码在使用其他managements命令时执行,我希望避免这种情况 更新:这将是可分发应用程序的一部分。我不希望用户(实际上是开发人员)运行任何其他命令。他们应该只能使用runserver命令。我也不想用自己的实现重写runserver命令 更新:Mymodels.py如下所示: from django.conf import settings if settin

我需要在devserver启动时执行一些代码

目前,我只是将代码放入我的一个应用程序中的
models.py

此解决方案有一个副作用:代码在使用其他managements命令时执行,我希望避免这种情况

更新:这将是可分发应用程序的一部分。我不希望用户(实际上是开发人员)运行任何其他命令。他们应该只能使用
runserver
命令。我也不想用自己的实现重写
runserver
命令

更新:My
models.py
如下所示:

from django.conf import settings

if settings.DEBUG: # I actually use another setting here, but it does not matter
    run_my_code_in_a_daemon_thread()
if __name__ == "__main__":
    if sys.argv[1] == 'runserver':
        # Your custom code
    execute_manager(settings)

我在这个文件里没有任何实际的模型。因此,我的代码只执行一次:当Django从安装的应用程序中扫描所有应用程序并导入它们的
模型时。py

自定义bash(python)启动器就可以了。或者您也可以自己编写。

自定义bash(python)启动器就可以了。或者您可以自己编写。

您只需更新本地的
manage.py
?检查传递的参数(您感兴趣的是
runserver
),如果有,则从那里执行所需的代码。类似如下:

from django.conf import settings

if settings.DEBUG: # I actually use another setting here, but it does not matter
    run_my_code_in_a_daemon_thread()
if __name__ == "__main__":
    if sys.argv[1] == 'runserver':
        # Your custom code
    execute_manager(settings)

您只需更新本地
manage.py
?检查传递的参数(您对
runserver
感兴趣),如果传递了,则从那里执行所需的代码。类似于以下内容:

from django.conf import settings

if settings.DEBUG: # I actually use another setting here, but it does not matter
    run_my_code_in_a_daemon_thread()
if __name__ == "__main__":
    if sys.argv[1] == 'runserver':
        # Your custom code
    execute_manager(settings)

我不想使用其他命令或脚本。我需要代码在devserver启动时自动运行。@AndreyFedov您的代码需要以某种方式启动,因此您应该编写一个启动器。或者,您可以检查您是否处于开发模式(我使用
platform.node()
执行此操作,但有很多选项)。我已经启动了我的代码,请看我的问题。我只需要确保它仅由devserver执行。@AndreyFedoseev您的代码每次都会启动。这就是为什么您需要一个特殊的启动程序。有三个选项:特殊启动程序、检查开发模式和暗魔法。但最后一个选项不是很可靠。:-“每次”是什么意思?它仅在导入
models.py
时启动。在我的
models.py
中,我没有任何实际的模型,只有一点需要执行的代码。因此,它只启动一次,当Django启动时,从已安装的应用程序扫描所有应用程序并导入它们的
models.py
。我不想使用其他命令或脚本。我需要代码在devserver启动时自动运行。@AndreyFedov您的代码需要以某种方式启动,因此您应该编写一个启动器。或者,您可以检查自己是否处于开发模式(我使用
platform.node()
执行此操作,但有很多选项)。我已经启动了我的代码,请看我的问题。我只需要确保它仅由devserver执行。@AndreyFedoseev您的代码每次都会启动。这就是为什么您需要一个特殊的启动程序。三个选项:特殊启动程序、检查开发模式和暗魔法。但最后一个选项不是很可靠。:-“每次”是什么意思?仅当导入了
models.py
时才会启动。在我的
models.py
中,我没有任何实际的模型,只有一些需要执行的代码。所以它只启动一次,当Django启动时,扫描所有安装的应用程序并导入它们的
模型。py
。对我来说不起作用。我使用zc.buildout和djangomipe,它为我生成manage.py脚本。因此,当我重建Django实例时,我所有的更改都将丢失。在这种情况下,DrTyrsa的答案适用:只需创建一个(类似引导加载程序的)脚本,在启动之前完成您想要完成的工作,然后让它运行
python manage.py runserver
。对我来说不起作用。我使用zc.buildout和djangomipe,它为我生成manage.py脚本。因此,当我重建Django实例时,我所有的更改都将丢失。在这种情况下,DrTyrsa的答案适用:只需创建一个(类似于引导加载程序的)脚本,在启动之前完成您想要完成的工作,然后让它运行
python manage.py runserver