簡體   English   中英

Django設置SECRET_KEY

[英]Django settings SECRET_KEY

我的項目有以下結構

project
--project
----settings
------base.py
------development.py
------testing.py
------secrets.json
--functional_tests
--manage.py

development.pytesting.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設置不能為空。

經過一些調查,我得到了以下內容

  1. 如果我將print(os.getcwd())放在base.py中, /media/grimel/Home/project/得到/media/grimel/Home/project/而不是/media/grimel/Home/project/project/settings/
  2. 僅當我替換時,此代碼才有效:
    key = "secrets.json"
    通過
    key = "project/settings/secrets.json"

我個人不喜歡這種解決方案。
所以,問題:

  1. 為什么,對於base.py,當前的工作目錄是如此混亂?
  2. 解決此問題的更好方法是什么?

工作目錄基於您運行程序的方式,在這種情況下, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM