我的项目结构如下
project
--project
----settings
------base.py
------development.py
------testing.py
------secrets.json
--functional_tests
--manage.py
development.py 和 testing.py '继承'来自 base.py
from .base import *
所以,我遇到问题
我在secretts.json中有Django的SECRET_KEY,它存储在设置文件夹
中我像这样加载这个键(在#34中看到这个; Django的两个勺子")
import json
from django.core.exceptions import ImproperlyConfigured
key = "secrets.json"
with open(key) as f:
secrets = json.loads(f.read())
def get_secret(setting, secret=secrets):
try:
return secrets[setting]
except KeyError:
error_msg = "Set the {} environment variable".format(setting)
raise ImproperlyConfigured(error_msg)
SECRET_KEY = get_secret("SECRET_KEY")
但是当我运行python manage.py runserver
夸夸其谈-嗒嗒
django.core.exceptions.ImproperlyConfigured:SECRET_KEY设置不能为空。
经过一些调查后,我得到了以下内容
print(os.getcwd())
放在 base.py 中,我会/media/grimel/Home/project/
而不是/media/grimel/Home/project/project/settings/
key = "secrets.json"
key = "project/settings/secrets.json"
就个人而言,我不喜欢这个解决方案 所以,问题:
答案 0 :(得分:3)
工作目录基于您运行程序的方式,在您的情况下python manage.py runserver
提示您的工作目录是包含manage.py
的目录。请注意,当以WSGI脚本或其他方式运行时,这可能会有所不同,因此您对使用key = "project/settings/secrets.json"
的担忧是有效的。
一种解决方案是使用__file__
中base.py
的值,可能是"project/settings/base.py"
。我会使用像
import os
BASE_DIR = os.path.dirname(__file__)
key = os.path.join(BASE_DIR, "secrets.json")
答案 1 :(得分:0)
为了简化生活,为什么不将secrets.json
移动到项目根目录和参考
import os
key = os.path.join(BASE_DIR, "secrets.json")
直接。这是独立于平台的,无需在设置文件中覆盖BASE_DIR
。不要忘记将您的设置文件添加到版本控制中。