我已经移动了我的SECRET_KEY
我的设置文件中的值,当我加载 virtualenv 时它会被设置。我可以确认该值存在于python manage.py shell
.
当我运行 Django 控制台时,SECRET_KEY
失踪了,这是应该的。因此,在首选项中,我转到 Console>Django Console 并加载SECRET_KEY
和适当的值。我返回 Django 控制台,然后SECRET_KEY
有没有。
正如预期的那样,我还无法运行 manage.py 任务,因为它尚未找到SECRET_KEY
。所以我进入“运行”>“编辑配置”来添加SECRET_KEY
进入 Django 服务器和 Django 测试,以及项目服务器。重新启动 Pycharm,确认密钥。
当我运行manage.py任务时,例如runserver
,我仍然得到KeyError: 'SECRET_KEY'.
我该把这把钥匙放在哪里?
由于 Pycharm 不是从终端启动,因此不会加载您的环境。简而言之,任何GUI程序都不会继承SHELL变量。看this由于某些原因(假设是 Mac)。
然而,这个问题有几个基本的解决方案。作为@用户3228589发布后,您可以将其设置为 PyCharm 中的变量。这有几个优点和缺点。我个人不喜欢这种方法,因为它不是single source
。为了解决这个问题,我在 settings.py 文件顶部使用了一个小函数,该函数在本地变量中查找变量.env
文件。我把我所有的“私人”东西都放在那里。我也可以在我的 virtualenv 中引用它。
这是它的样子。
-- 设置.py
def get_env_variable(var_name, default=False):
"""
Get the environment variable or return exception
:param var_name: Environment Variable to lookup
"""
try:
return os.environ[var_name]
except KeyError:
import StringIO
import ConfigParser
env_file = os.environ.get('PROJECT_ENV_FILE', SITE_ROOT + "/.env")
try:
config = StringIO.StringIO()
config.write("[DATA]\n")
config.write(open(env_file).read())
config.seek(0, os.SEEK_SET)
cp = ConfigParser.ConfigParser()
cp.readfp(config)
value = dict(cp.items('DATA'))[var_name.lower()]
if value.startswith('"') and value.endswith('"'):
value = value[1:-1]
elif value.startswith("'") and value.endswith("'"):
value = value[1:-1]
os.environ.setdefault(var_name, value)
return value
except (KeyError, IOError):
if default is not False:
return default
from django.core.exceptions import ImproperlyConfigured
error_msg = "Either set the env variable '{var}' or place it in your " \
"{env_file} file as '{var} = VALUE'"
raise ImproperlyConfigured(error_msg.format(var=var_name, env_file=env_file))
# Make this unique, and don't share it with anybody.
SECRET_KEY = get_env_variable('SECRET_KEY')
然后 env 文件看起来像这样:
#!/bin/sh
#
# This should normally be placed in the ${SITE_ROOT}/.env
#
# DEPLOYMENT DO NOT MODIFY THESE..
SECRET_KEY='XXXSECRETKEY'
最后你的 virtualenv/bin/postactivate 可以获取这个文件。您可以进一步按照描述导出变量here如果您愿意,但由于设置文件直接调用 .env,因此实际上没有必要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)