Django执行makemigrations提示SECRET_KEY为空但已配置的问题求助
问题原因
你执行python manage.py makemigrations时没有指定配置文件,Django默认会读取portfolio.settings模块作为配置,而你将配置拆分为三个文件后,settings文件夹下没有在__init__.py中指定默认加载的配置,也没有修改manage.py的默认配置路径,导致Django无法读取到dev.py中设置的SECRET_KEY,才会抛出配置为空的错误。你运行runserver时手动指定了--settings=portfolio.settings.dev,所以能正常启动。
解决方案
- 方案1:执行Django命令时统一带上配置参数,和runserver保持一致:
后续执行migrate、createsuperuser等命令都需要加上该参数。python manage.py makemigrations --settings=portfolio.settings.dev - 方案2:修改manage.py的默认配置路径,本地开发无需重复加参数:
打开项目根目录的manage.py文件,找到如下代码:
修改为:os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'portfolio.settings')
保存后执行所有Django命令默认会加载dev.py的配置。os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'portfolio.settings.dev') - 方案3:在settings文件夹下的
__init__.py中添加环境判断,自动加载对应配置:
在settings/__init__.py中写入以下代码:
部署到生产环境时,只需要在服务器设置环境变量import os # 读取环境变量判断运行环境,默认是开发环境 run_env = os.environ.get('RUN_ENV', 'dev') if run_env == 'prod': from .prod import * else: from .dev import *RUN_ENV=prod即可自动加载生产配置,不需要修改代码。
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

