数据库最佳实践中的Django应用程序全局变量
Django application global variables in database best praxis
我是 django 的新手。我将全局应用程序变量存储在设置环境文件夹中。但是现在我需要在数据库中存储变量,因为我想从 django admin 更改它们。
我的方法是:在 django 核心中创建模型 class,其中定义两个变量 app_name - 应用程序和数据列表 - JSON。但我认为这不是最佳实践。由于可能难以使用 GIT
决定使用 ready-made 解决方案:django-extra-setting。
在应用程序设置中定义将存储在数据库中的变量:
DB_VARIABLES = {'variable_name': ['text', 'default_value']}
加载 django 项目后从文件中读取变量
from settings import PROJECT_APPS
from extra_settings.models import Setting
from importlib import import_module
class CoreConfig(AppConfig):
def ready(self):
if (is_manage_py and is_runserver) or (not is_manage_py):
local_settings = import_module(f'path/{app_name}')
for app_name in PROJECT_APPS:
local_constants = local_settings.DB_VARIABLES if hasattr(local_settings, 'DB_VARIABLES') else False
if local_constants:
variables = {**variables, **{key: local_constants[key] for key in local_constants}}
for constant_name in local_constants:
if Setting.objects.filter(name=constant_name).count() == 0:
constant_values = local_constants[constant_name]
Setting(name=constant_name, value_type=constant_values[0], value=constant_values[1]).save()
我是 django 的新手。我将全局应用程序变量存储在设置环境文件夹中。但是现在我需要在数据库中存储变量,因为我想从 django admin 更改它们。 我的方法是:在 django 核心中创建模型 class,其中定义两个变量 app_name - 应用程序和数据列表 - JSON。但我认为这不是最佳实践。由于可能难以使用 GIT
决定使用 ready-made 解决方案:django-extra-setting。
在应用程序设置中定义将存储在数据库中的变量:
DB_VARIABLES = {'variable_name': ['text', 'default_value']}
加载 django 项目后从文件中读取变量
from settings import PROJECT_APPS
from extra_settings.models import Setting
from importlib import import_module
class CoreConfig(AppConfig):
def ready(self):
if (is_manage_py and is_runserver) or (not is_manage_py):
local_settings = import_module(f'path/{app_name}')
for app_name in PROJECT_APPS:
local_constants = local_settings.DB_VARIABLES if hasattr(local_settings, 'DB_VARIABLES') else False
if local_constants:
variables = {**variables, **{key: local_constants[key] for key in local_constants}}
for constant_name in local_constants:
if Setting.objects.filter(name=constant_name).count() == 0:
constant_values = local_constants[constant_name]
Setting(name=constant_name, value_type=constant_values[0], value=constant_values[1]).save()