Skip to main content
 首页 » 编程设计

python之如何从本地文件导入环境变量到Django

2024年08月13日46cmt

我正在准备我的第一个专业 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')