首页 > 解决方案 > 在 Django 管理站点中使 settings.py 中的变量可配置

问题描述

在我部署的 Django Web 后端应用程序中,一些变量(例如 react_app_url、log_level)在 settings.py 中指定。

我可以通过重新启动 Django 应用程序重新配置它们并使它们生效。但是重新启动过程会暂停整个服务,并可能影响与 Django API 交互的其他人。

可以在运行时通过 Django 管理站点配置这些变量吗?

更新:根据Django 文档,不建议更改 settings.py 中的变量

标签: python-3.xdjango

解决方案


假设您有一个名为core包含模型的应用程序Config,并且您想在管理页面中修改“配置”。所以你必须注意两件事:

  1. 加载配置到settings项目启动时。
  2. 更新settings配置时更新。

我的想法是使用apps.ready和建模信号来做上面的所有事情。

core/__init__.py

default_app_config = "core.apps.CoreConfig"

core/apps.py

from django.apps import AppConfig
from django.conf import settings


class CoreConfig(AppConfig):
    name = 'core'

    def ready(self):
        from . import signals
        # set all your value from Config model to settings here

core/signals.py

from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver, Signal

from core.models import Config

@receiver(post_save, sender=Config)
def update_config_handler(sender, instance, created, **kwargs):
    # Update your settings value here
    # settings.VALUE = instance.value
    pass

推荐阅读