Python django settings.py os.environ.get(“X”)未获取正确的值
我试图访问OS环境变量并将其值获取到settings.py中,而在调试应用程序时,我并没有获取该记录的值。详情如下: 有些重要/机密密钥无法在代码中共享,因此这些密钥将导出到操作系统环境变量中。每当我从linux终端或python shell(manage.py shell)回显$KEY_VAL时,它都会打印环境变量的正确值 但在调试应用程序时,它显示值为“无”。我正在使用ipdb调试器,使用以下命令打印值时,结果为“无”:Python django settings.py os.environ.get(“X”)未获取正确的值,python,linux,django,zsh,boto,Python,Linux,Django,Zsh,Boto,我试图访问OS环境变量并将其值获取到settings.py中,而在调试应用程序时,我并没有获取该记录的值。详情如下: 有些重要/机密密钥无法在代码中共享,因此这些密钥将导出到操作系统环境变量中。每当我从linux终端或python shell(manage.py shell)回显$KEY_VAL时,它都会打印环境变量的正确值 但在调试应用程序时,它显示值为“无”。我正在使用ipdb调试器,使用以下命令打印值时,结果为“无”: p settings.KEY_VAL 在settings.py中,以
p settings.KEY_VAL
在settings.py中,以下是获取os env变量的语句:
import os; KEY_VAL = os.environ.get("KEY_VAL")
我在我的ubuntu系统中使用ZSH。这是我的~/.zshrc文件:
#
# Executes commands at the start of an interactive session.
#
# Authors:
# Sorin Ionescu <sorin.ionescu@gmail.com>
#
# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi
export KEY_VAL='SOME_JUNK_VAL'
fortune | cowsay | lolcat
# Customize to your needs...
#
#在交互式会话开始时执行命令。
#
#作者:
#索林·伊奥尼斯库
#
#来源:Prezto。
if[-s“${ZDOTDIR:-$HOME}/.zprezto/init.zsh”];然后
来源“${ZDOTDIR:-$HOME}/.zprezto/init.zsh”
fi
导出密钥\'u VAL='SOME \'u JUNK \'
《财富》杂志
#根据您的需要定制。。。
注意:我已经更改了变量名和值
但如果你能帮忙,我很感激 您的问题当然不在于python代码。这在我们的许多django应用程序中都能完美地工作 我猜您根本没有从zsh启动django服务器,因此没有加载.zshrc。对于标准nginx/gunicorn设置来说,情况肯定是这样的,gunicorn作为守护进程运行,从不通过交互式命令行。另外,可能是您没有使用相同的用户来执行此操作 您可以通过在django应用程序的某处添加以下代码来验证这一点:
import os
print os.environ
顺便说一句,您还可以重新考虑通过.zshrc注入环境变量。对于简单的设置,我们通常将它们保存在.env文件中,并用于在django启动时读取它们。就安全性而言,这与您的设置相同,但它不绑定到登录用户。如何启动django服务器?您是对的@Nuschk。我一次又一次地调试这个应用程序,发现通过python manage.py runserver运行django工作得非常好,但如果用户通过nginx尝试这个应用程序,那么它会给我带来问题。是的,这听起来和我预期的很像。正如我所说的,django dotenv可能正是您想要的。