我想让Django开发服务器在开始运行之前做一些事情。为此,我创建了一个新的应用程序,将其添加到INSTALLED_APPS
的顶部,然后使用以下代码在应用程序中创建了一个management/commands/runserver.py
文件:
from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand
class Command(RunserverCommand):
def run(self, *args, **options):
self.stdout.write('About to start running on ' + self.addr)
super(Command, self).run(*args, **options)
(当然,我想做的事情比向stdout写一行代码要复杂得多,但这是演示问题的最简单的例子。我重写run
,而不是handle
或其他方法,是因为我需要在运行此代码时已经设置self.addr
。)
当我运行./manage.py runserver
时,在服务器开始运行之前,“About to start running on 127.0.0.1”行不是出现一次,而是两次。为什么会发生这种情况?我们能做些什么?在
auto-reloader进程被证明是罪魁祸首;autoreload进程得到了与原始进程相同的参数,并经历了相同的初始化过程。解决方案是,只有在autoreloader生成的进程中没有运行服务器前的代码时才执行,该进程可以通过环境变量检测到:
本地开发服务器为自动重新加载程序运行单独的进程。您可以通过传递noreload标志关闭自动重新加载过程。在
相关问题 更多 >
编程相关推荐