Django:如何在启动时禁用数据库状态检查?

Posted

技术标签:

【中文标题】Django:如何在启动时禁用数据库状态检查?【英文标题】:Django: How to disable Database status check at startup? 【发布时间】:2017-12-27 15:53:14 【问题描述】:

据我所知,如果 settings.py 中设置的任何数据库在应用程序启动时关闭,则 Django 应用程序将无法启动。无论如何让Django“延迟加载”初始数据库连接?

我配置了两个数据库,其中一个有点不稳定,有时可能会关闭几秒钟,但它仅用于应用程序的某些特定用例。正如您可以想象的那样,我不希望所有应用程序因此而无法启动。有什么解决办法吗?

我使用的是 Django 1.6.11,我们还使用 Django South 进行数据库迁移(以防它以某种方式相关)。

【问题讨论】:

我认为你错了。当您启动./manage.py runserver 时,Django 不一定会访问数据库。您的模块中可能有代码在加载模块时而不是在视图运行时引起数据库查询。 确定吗? Performing system checks... 是做什么的?它不检查模型并且这不意味着数据库正在启动吗?事实上,引用docs.djangoproject.com/en/1.11/topics/checks:字段、模型、模型管理器和数据库后端都实现了一个 check() 方法 我想知道你是否觉得我的回答有帮助 【参考方案1】:

我不知道它有多安全,但您可以执行以下操作:

    在您的settings.py 中以空DATABASES 开头:

    DATABASES = 
    

    在您的apps.py 中,利用ready() 挂钩来建立您的数据库连接:

    from settings.py import DATABASES
    
    class YourAppConfig(AppConfig):
    
        def ready(self):
            DATABASES.update(
                Your database connections
            )
    

现在我无法为那个火上浇油,但需要 Django will try to reinitialize the database connection。

【讨论】:

【参考方案2】:

我做了更多的测试,只有当您使用开发服务器python manage.py runserver 时才会出现问题。在这种情况下,它会强制与数据库建立连接。

使用实际的 WSGI 服务器不会像 @Alasdair 告知的那样发生。

@JohnMoutafis 最后我没有测试你的解决方案,但这可以工作。

【讨论】:

以上是关于Django:如何在启动时禁用数据库状态检查?的主要内容,如果未能解决你的问题,请参考以下文章

django 表单:如何检查模板中的复选框状态

如何在android studio上以编程方式检查自动启动权限是启用还是禁用

如何在 SwiftUI 中禁用子视图上的特定状态更改动画

Django:如何将外键检查设置为 0

Django QuerySet - 如何“禁用”以前的过滤值

Oracle如何查询当前的crs/has自启动状态