在我们的项目中,我们不会使用Django ORM,因此我无法使用Django数据库验证。我需要在启动服务器之前验证数据库连接。任何人都可以帮助我实现同样的最佳实践吗?
我的想法是在manage.py中引入几行代码或模块,在执行execute_from_command_line(sys.argv)之前验证数据库连接。我的方法是正确的还是有更好的方法来实现同样的目标。
答案 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