django settings.py os.environ.get( "X" ) 没有获取正确的值



我正试图访问并将OS Environment变量的值获取到settings.py中,在调试应用程序时,我获得了该记录的None值。以下是更多详细信息:

有一些重要的/秘密密钥不能在代码中共享,因此这些密钥将在操作系统环境变量中导出。每当我从linux终端或python shell(manage.py shell)回显$KEY_VAL时,它都会打印我的环境变量的正确值。

但在调试应用程序时,它显示值为None。我正在使用ipdb调试器,并使用以下命令打印值,结果为None:

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...

注意:我已经更改了变量的名称和值。

但如果你能帮忙,我很感激。

您的问题当然不在于您的python代码。这在我们的许多django应用程序中都能完美地工作。

我的猜测是,您根本没有从zsh启动django服务器,因此没有加载.zshrc。对于标准的nginx/gunicorn设置来说,情况肯定是这样的,其中gunicorn作为守护进程运行,而不是通过交互式命令行。此外,可能是您没有为此使用同一用户。

您可以通过在django应用程序中添加以下代码来验证这一点:

import os
print os.environ

顺便说一句,您也可以重新考虑通过.zshrc注入环境变量。对于简单的设置,我们通常将它们保存在.env文件中,并使用https://github.com/jpadilla/django-dotenv感谢在django启动时阅读它们。从安全角度来看,这与您的设置相同,但它不绑定到登录用户。

最新更新