![](/img/trans.png)
[英]Django: The SECRET_KEY setting must not be empty even if it exists in settings
[英]Django settings SECRET_KEY
我的項目有以下結構
project
--project
----settings
------base.py
------development.py
------testing.py
------secrets.json
--functional_tests
--manage.py
development.py和testing.py來自base.py的 “繼承”
from .base import *
所以我有問題
我在secrets.json中有Django的SECRET_KEY,該文件存儲在settings文件夾中
我像這樣加載此密鑰(請參閱“ 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/
而不是/media/grimel/Home/project/project/settings/
key = "secrets.json"
key = "project/settings/secrets.json"
我個人不喜歡這種解決方案。
所以,問題:
工作目錄基於您運行程序的方式,在這種情況下, python manage.py runserver
暗示您的工作目錄是包含manage.py
目錄。 請注意,當以WSGI腳本或其他方式運行時,這可能會有所不同,因此您對使用key = "project/settings/secrets.json"
是有效的。
一種解決方案是在base.py
使用__file__
的值,可能是"project/settings/base.py"
。 我會用類似的東西
import os
BASE_DIR = os.path.dirname(__file__)
key = os.path.join(BASE_DIR, "secrets.json")
為了簡化工作,為什么不將secrets.json
移到項目的根目錄並進行引用
import os
key = os.path.join(BASE_DIR, "secrets.json")
直。 這是與平台無關的,因此您無需完全覆蓋設置文件中的BASE_DIR
。 不要忘記將您的設置文件添加到版本控制中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.