我正在准备我的第一个专业 Django 项目的生产,但我在使用环境变量来保护应用程序方面遇到了问题。到目前为止,我已经设法创建了一个本地文件来存储我电脑上的所有变量...
环境变量.py
import os
db_user = os.environ.get('db_user')
db_password = os.environ.get('db_password')
# AWS DJANGO
export AWS_ACCESS_KEY_ID = "access_key"
export AWS_SECRET_ACCESS_KEY = "secret_key"
export AWS_STORAGE_BUCKET_NAME = "bucket_name"
print(db_user)
print(db_password)
我已经使用环境设置 (windows) 来创建用户名和密码。当我运行文件时,它们起作用了。我正在使用我的 AWS 凭证对此进行测试。我的印象是 Django 可以访问这些信息,无论它在我本地电脑上的什么位置。如果我错了,请纠正我。
settings.py
...
AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = os.environ.get('AWS_STORAGE_BUCKET_NAME')
...
我知道 Django 没有访问这个文件,因为我的所有媒体文件都得到了 400,但是当我将 key 直接放入 settings.py 文件时它起作用了。我相信我在这里错过了一些步骤。我见过其他 python 编码器能够做到这一点,而不必使用 django-environ 或其他包之类的东西。如果有人可以提供帮助,我们将不胜感激,因为我想为我的所有项目都这样做。
编辑
我的 Procfile 的 gunicorn 是 web: gunicorn project_name.wsgi
我没有修改我的 wsgi 文件。
最佳答案
我建议您使用 django-environ配置您的应用程序。 将所有配置值保存在一个单独的文件中,比如 .env - 这不应该添加到 repo。
.env
AWS_ACCESS_KEY_ID = "access_key"
AWS_SECRET_ACCESS_KEY = "secret_key"
AWS_STORAGE_BUCKET_NAME = "bucket_name"
现在在您的 Django settings.py 中加载 env 文件并使用相应的 key 。
settings.py
import environ
env = environ.Env()
env.read_env(env.str('ENV_PATH', '/path/to/.env'))
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
关于python - 如何从本地文件导入环境变量到Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56011050/