在runserver上进行Django DB连接验证

时间:2015-10-01 09:49:30

标签: python django

在我们的项目中,我们不会使用Django ORM,因此我无法使用Django数据库验证。我需要在启动服务器之前验证数据库连接。任何人都可以帮助我实现同样的最佳实践吗?

我的想法是在manage.py中引入几行代码或模块,在执行execute_from_command_line(sys.argv)之前验证数据库连接。我的方法是正确的还是有更好的方法来实现同样的目标。

2 个答案:

答案 0 :(得分:1)

您可以编写自己的manage命令来检查数据库连接,如果可以,请调用 runserver 命令:

from django.core.management.base import BaseCommand
from django.core.management import call_command
from django.db import connection


class Command(BaseCommand):
    def handle(self, *args, **options):
        cursor = connection.cursor()
        cursor.execute("select 1")
        call_command('runserver')

答案 1 :(得分:0)

如果要在运行之前替换runserver命令并注入测试:

项目/ settings.py

INSTALLED_APPS = [
    ...
    'project.app',
    'django.contrib.staticfiles'
    ]

订单很重要,因为它决定哪个应用程序会超载其他管理命令。

项目/应用/管理/命令/ runserver.py

from django.core.management.commands.runserver import Command as BaseCommand

class Command(BaseCommand):
    def __init__(self, *args, **kwargs):
        try:
            #test your connections
        except SomeException as e:
            #handle your error
        super(BaseCommand, self).__init__(*args, **kwargs)

这样,runserver命令总是在每次运行之前检查您的约束。如果希望命令运行,也可以在except子句中重新加载错误。这导致init代码运行两次,我不知道为什么。

如果您使用的是django-devserver,则导入变为:

from django_devserver.devserver.management.commands.runserver import Command as BaseCommand