【问题标题】:Can't import value from .env file / Django无法从 .env 文件/Django 导入值
【发布时间】: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


【解决方案1】:

解决方案:

官方文档促使我尝试这个:

from decouple import config, AutoConfig # <-- AutoConfig added

#  ...

config = AutoConfig(search_path='.env') # <-- .env file located next to manage.py 

SECRET_KEY = config('SECRET_KEY')
DB_PASSWORD = config('DB_PASSWORD')


VAR3 = config('VAR3')
VAR4 = config('VAR4')

当我通过 default 值提供空字符串时,代码开始工作,但是 config() 没有传递真正的字符串 - 只是默认值,它没有解决任何问题,只是让 django 服务器运行。

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2021-09-09
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2022-01-17
    • 2022-10-17
    相关资源
    最近更新 更多