环境与进程相关联,并在父进程分叉时继承一个副本。您可以在运行另一个命令之前让 bash 将设置注入环境。
以下命令将./manage runserver
在现有的 bash 环境中运行,并添加两个额外的环境变量DJANGO_SETTINGS_MODULE
和MY_DB_PASSWORD
.
DJANGO_SETTINGS_MODULE=myproject.settings.dev MY_DB_PASSWORD=foo ./manage.py runserver
正如您所建议的,您可以在设置文件中使用以下 Python 代码从环境中提取值。
import os
db_passwd = os.environ.get('MY_DB_PASSWORD', 'default-db-password')
您可以将密码放入 中.profile
,但这可能不是一个好主意,因为您将敏感信息与非敏感信息混合在一起。然后,您必须保护.profile
文件权限,否则其他人将只能读取文件以获取您的密码。
我认为在这种情况下更好的设置管理方法是有一个单独的文件专门用于敏感设置,例如密码。保护此文件的权限,以便只有需要它的用户才能读取,例如您的 Web 服务器。然后,您可以从您的密码文件中读取此密码文件settings.py
以获取密码。Python ConfigParser 模块的使用在这里可能很有用。
如果需要,您可以使用环境变量来指定此文件的位置,或者如果未指定,则回退到默认值。
例如。DB_PASSWD_FILE=~/tmp/test_db_passwords.ini ./manage.py 运行服务器
然后在settings.py
import os
db_passwd_file = os.environ.get('DB_PASSWD_FILE', '/etc/myproject/db_passwords.ini')
# Instantiate a ConfigParser object here to read passwords from db_passwd_file.
这允许默认行为在系统受保护的文件中查找,/etc/myprojecdt/db_passwords.ini
除非该位置已被DB_PASSWD_FILE
环境变量覆盖。
在开发过程中,您可以设置DB_PASSWD_FILE
指向一个合理的位置以用于.profile
. DB_PASSWD_FILE
指向的路径可以被保护为仅由您使用文件系统权限读取。