Django3 在运行时刷新/重新加载配置设置

问题描述 投票:0回答:2

我正在使用 Django3 应用程序,配置 settings.py 在应用程序启动期间加载。考虑一个应用程序正在生产中运行,如果任何令牌过期以重新生成令牌,则需要在运行时从 settings.py 获取配置。如果令牌过期,我会遇到异常。仅当令牌过期时,我应该如何在运行时重新加载/刷新配置设置。

python-3.x token django-3.0
2个回答
0
投票

我实际上认为你试图在这里解决错误的问题,但让我先解决你的主要问题。

您只需执行以下操作即可从代码中获取设置信息:

from django.conf import settings

然后您可以访问

settings.<setting val>
- 例如。
if settings.DEBUG:
在您的代码中。

现在,当您谈论令牌时,我猜您指的是用户令牌,以表明他们具有有效的会话(“用户”我也指 API 登录),这可能已超时。

settings.py
保存与 Django 会话本身相关的信息 - 即服务器端进程。它不保存有关当前用户的信息,因此我认为您没有理由需要在任何时候重新加载它。它在 django 进程启动时加载(通过 runserver、gunicorn 或其他方式)。如果您发现自己需要在 Django 已经启动并运行时重新加载
settings.py
,那么几乎可以肯定您的设置中有一些内容应该在其他地方处理。


0
投票

据我了解,您正在尝试执行以下操作来更新两个服务之间使用的

SYSTEM-TO-SYSTEM
令牌。我已经设法使用 django-environ

解决了这个问题

现在需要进行一些配置。

settings.py

...
import environ

class NonCachedFileAwareEnv(environ.Env):
    ENVIRON = FileAwareMapping(cache=False)


ENV_LOADER = NonCachedFileAwareEnv(
    TEST_FILE_AWARE=(str, "")
)
...

现在要访问变量,由于

settings.SOME_ENV_NAME
的性质,我们将无法使用
lazy-loading
。相反,我们将通过
ENV_LOADER
变量访问它。比如

settings.ENV_LOADER('TEST_FILE_AWARE')

我们还需要设置一个环境变量

TEST_FILE_AWARE_FILE
,它指向带有
APIKEY
的文件,表示
_FILE
前缀。 (通过
_FILE
此处了解有关变量的更多信息)

© www.soinside.com 2019 - 2024. All rights reserved.