【问题标题】:Reusing django code auto-reload functionality for custom management commands为自定义管理命令重用 django 代码自动重新加载功能
【发布时间】:2011-06-07 21:11:23
【问题描述】:

我喜欢 django 服务器如何在代码更改时自动重新加载,因此不需要重新启动服务器。

我们目前使用可能需要很长时间才能完成的 django 自定义管理命令。

有什么方法可以使用 django 的自动重载功能 我们的管理命令的服务器?

例如,如果检测到底层 django 代码库的变化,该命令会重新加载自身并继续执行非常长(无状态)的循环。

【问题讨论】:

    标签: django django-command-extensions


    【解决方案1】:

    无论您的管理命令在做什么,将其抽象为单个函数并使用 django.utils.autoreload.main 调用该函数

    from django.utils import autoreload
    
    def do_something(*args, **kwargs):
        # management command logic
    
    
    class Command(BaseCommand):
    
        def handle(self, *args, **options):
            self.stdout('This command auto reloads. No need to restart...')
            autoreload.main(do_something, args=None, kwargs=None)
    

    对于 django 2.2 或更高版本使用

            autoreload.run_with_reloader(do_something, args=None, kwargs=None)
    

    【讨论】:

    【解决方案2】:

    检查runserver(特别是运行方法)使用django.utils.autoreload 模块的方式。您需要使用自定义命令复制此模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 2016-03-28
      • 1970-01-01
      • 2016-07-09
      • 2012-12-05
      相关资源
      最近更新 更多