运行Django遇SECRET_KEY不能为空错误,已配置密钥仍报错求解决
解决Django SECRET_KEY已配置但仍提示为空的问题
嘿,我一眼就揪出问题所在啦!你看你写的settings.py代码,django.setup()居然放在了import os和SECRET_KEY配置的前面——这就相当于你还没告诉Django密钥是什么,就先让它启动初始化了,它当然会喊“密钥为空”啦!
问题根源
Django的setup()方法会触发配置加载流程,而你在执行这个方法的时候,SECRET_KEY、BASE_DIR这些关键配置还没被定义,自然就会抛出ImproperlyConfigured错误。
修复方案
- 调整代码顺序:把
django.setup()移到所有配置项的后面,确保Django初始化前能读取到SECRET_KEY。修正后的settings.py片段如下:
import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'g1tmo148kxtw#^obw&apoms%n=&4g+2qi1ssuc$v3(fig-he4u' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True # 把setup移到所有配置之后 import django django.setup()
- 更规范的做法:其实通常我们不会在settings.py文件里直接调用
django.setup()。如果是你需要在外部脚本中使用Django环境(比如单独运行一个处理模型的脚本),应该在脚本里做初始化,而不是修改settings.py。示例如下:
import os import django # 告诉Django使用哪个配置文件 os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的项目名称.settings') # 初始化Django django.setup() # 之后就可以正常导入Django模型等内容了 from your_app.models import YourModel
按这个改完,再启动Django应该就不会报错啦!
内容的提问来源于stack exchange,提问作者Nikul Panchal
相关产品推荐
相关产品推荐

