![](/img/trans.png)
[英]Django - raise ImproperlyConfigured(“The SECRET_KEY setting must not be empty.”)
[英]Django os.getenv('SECRET_KEY') throwing "The SECRET_KEY setting must not be empty."
我正在使用 os.getenv 設置os.getenv
以准備使用 Docker 進行部署,但它似乎沒有讀取.env
文件。 知道為什么不閱讀它嗎?
這是設置:
.env
SECRET_KEY=foo
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
settings.py
抽象
import os
from pathlib import Path
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = os.getenv('SECRET_KEY')
DEBUG = os.getenv('DEBUG')
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS')
您可以使用python-decouple來獲取存儲在項目根目錄中的環境變量 .env 文件。
from decouple import config
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
EMAIL_HOST = config('EMAIL_HOST', default='localhost')
EMAIL_PORT = config('EMAIL_PORT', default=25, cast=int)
注意:要應用更改,您需要重新啟動服務器。
我正在使用 python-dotenv 來實現 dotenv 功能。 如果你想讓Django找到你的.env文件,你需要修改manage.py和wsgi.py文件。
# manage.py
import os
import sys
import dotenv
def main():
"""Run administrative tasks."""
# dotenv settings
dotenv.load_dotenv(
os.path.join(os.path.dirname(__file__), '.env')
)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
# wsgi.py
import os
import dotenv
from django.core.wsgi import get_wsgi_application
# dotenv settings
dotenv.load_dotenv(
os.path.join(os.path.dirname(os.path.dirname(__file__)), '.env')
)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if os.getenv('DJANGO_SETTINGS_MODULE'):
os.environ['DJANGO_SETTINGS_MODULE'] = os.getenv('DJANGO_SETTINGS_MODULE')
application = get_wsgi_application()
通過docker-compose部署時,可以在容器設置[web]中的docker-compose file.bml中指定:
web:
...
環境文件:
-./.env
它在不使用額外包的情況下對我有用。 在我的例子中,file.env 位於 docker-compose.yml 所在的目錄中
要從 docker 或 AWS Elastic Beanstalk 獲取環境變量,我使用os.environ.get('SECRET_KEY')
,這通常比os.environ['SECRET_KEY']
更可靠
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.