为什么在Django开发服务器中两次调用run?

发布于 2021-01-29 17:44:16

我想让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)

(其实我想要做的事情是不是写作课程一行到标准输出,更复杂,但是这是一个演示该问题最简单的例子,我之所以超越run,而不是handle或其他方法,是因为我需要self.addr已经在运行此代码时设置。)

当我运行时./manage.py runserver,“关于要在127.0.0.1上开始运行”行不是出现一次,而是在服务器开始运行之前出现两次。为什么会这样,该怎么办?

关注者
0
被浏览
272
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    事实证明,自动重新加载程序是罪魁祸首。事实证明,自动重新加载过程与原始过程具有相同的参数,并经过相同的初始化过程。解决方案是仅在自动重载程序产生的进程中未运行服务器前代码时才执行该代码,可以通过环境变量检测到该代码:

    import os
    from django.contrib.staticfiles.management.commands.runserver import Command as RunserverCommand
    class Command(RunserverCommand):
        def run(self, *args, **options):
            if os.environ.get('RUN_MAIN') != 'true':
                self.stdout.write('About to start running on ' + self.addr)
            super(Command, self).run(*args, **options)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看