我正在使用 Django3 应用程序,配置 settings.py 在应用程序启动期间加载。考虑一个应用程序正在生产中运行,如果任何令牌过期以重新生成令牌,则需要在运行时从 settings.py 获取配置。如果令牌过期,我会遇到异常。仅当令牌过期时,我应该如何在运行时重新加载/刷新配置设置。
我实际上认为你试图在这里解决错误的问题,但让我先解决你的主要问题。
您只需执行以下操作即可从代码中获取设置信息:
from django.conf import settings
然后您可以访问
settings.<setting val>
- 例如。 if settings.DEBUG:
在您的代码中。
现在,当您谈论令牌时,我猜您指的是用户令牌,以表明他们具有有效的会话(“用户”我也指 API 登录),这可能已超时。
settings.py
保存与 Django 会话本身相关的信息 - 即服务器端进程。它不保存有关当前用户的信息,因此我认为您没有理由需要在任何时候重新加载它。它在 django 进程启动时加载(通过 runserver、gunicorn 或其他方式)。如果您发现自己需要在 Django 已经启动并运行时重新加载 settings.py
,那么几乎可以肯定您的设置中有一些内容应该在其他地方处理。
据我了解,您正在尝试执行以下操作来更新两个服务之间使用的
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
此处了解有关变量的更多信息)