【发布时间】:2023-01-13 14:29:48
【问题描述】:
我得到了一个文件 .env,其中包含 4 个值来隐藏敏感数据:
DATABASE_PASSWD=Password1
SECRET_KEY=Password2
VAR3=Password3
VAR4=Password4
除DATABASE_PASSWORD 外,以上所有值都已正确导入 Django 代码。当DATABASES配置如下:
# settings.py
from decouple import config
# ...
DB_PASSWORD=config('DATABASE_PASSWD')
SECRET_KEY=config('SECRET_KEY')
VAR3=config('VAR3')
VAR4=config('VAR4')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': "database_name",
'USER': "database_test_admin",
'PASSWORD': DB_PASSWORD,
'HOST': "localhost",
'PORT': "5432",
}
}
django 输出:
raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option))
decouple.UndefinedValueError: DATABASE_PASSWD not found. Declare it as envvar or define a default value.
如果我硬编码与 .env 中相同的密码,问题就消失了——密码是正确的,因为它是我的私人项目。例如,其他变量在视图中与相同的 config('VAR#') 函数配合得很好。我不知道这里可能出了什么问题。
【问题讨论】:
-
从github.com/HBNetwork/python-decouple 的 github 页面来看,它看起来需要强制转换参数或默认提供
-
您可以更改数据库密码吗?我使用 decouple,多年来我遇到过一个奇怪的情况,当时一个很长的带有特殊字符的密码没有通过。我更改了 PW,它起作用了。
-
@whoami - 来自那个页面:
By default, all values returned by decouple are strings,所以如果你想要另一种类型,你只需要转换。这就是 .env 文件不需要引号的原因
标签: django environment-variables