[英]python-decouple | The SECRET_KEY setting must not be empty
该项目是使用 Django 3.1.1 创建的。 它最近更新为 Django 3.1.4 并且运行良好。 之后,安装了 python-decouple 3.3,它也运行良好。 我们(故意)删除了我们的测试数据库,以查看是否一切正常并且发生了这种情况。 运行python manage.py makemigrations
时出现以下错误
Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "P:\crm\env\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
utility.execute()
File "P:\crm\env\lib\site-packages\django\core\management\__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "P:\crm\env\lib\site-packages\django\core\management\base.py", line 330, in run_from_argv
self.execute(*args, **cmd_options)
File "P:\crm\env\lib\site-packages\django\core\management\base.py", line 368, in execute
self.check()
File "P:\crm\env\lib\site-packages\django\core\management\base.py", line 392, in check
all_issues = checks.run_checks(
File "P:\crm\env\lib\site-packages\django\core\checks\registry.py", line 70, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "P:\crm\env\lib\site-packages\django\core\checks\templates.py", line 22, in
check_setting_app_dirs_loaders
for conf in settings.TEMPLATES
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 83, in __getattr__
self._setup(name)
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 70, in _setup
self._wrapped = Settings(settings_module)
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 177, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "C:\Users\rodri\AppData\Local\Programs\Python\Python38\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "P:\crm\app\config\settings.py", line 13, in <module>
from core.user.models import User as u
File "P:\crm\app\core\user\models.py", line 1, in <module>
from django.contrib.auth.base_user import AbstractBaseUser
File "P:\crm\env\lib\site-packages\django\contrib\auth\base_user.py", line 48, in <module>
class AbstractBaseUser(models.Model):
File "P:\crm\env\lib\site-packages\django\db\models\base.py", line 108, in __new__
app_config = apps.get_containing_app_config(module)
File "P:\crm\env\lib\site-packages\django\apps\registry.py", line 253, in get_containing_app_config
self.check_apps_ready()
File "P:\crm\env\lib\site-packages\django\apps\registry.py", line 135, in check_apps_ready
settings.INSTALLED_APPS
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 83, in __getattr__
self._setup(name)
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 70, in _setup
self._wrapped = Settings(settings_module)
File "P:\crm\env\lib\site-packages\django\conf\__init__.py", line 196, in __init__
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
我的项目结构如下:
project
|
|- config
| |- .env
| |- settings.py
|- core
|- app1
|- app2
这是我的settings.py
import config.db as db
from core.user.models import User # Custom user model
from decouple import config
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', cast=bool)
...
这是.env
文件结构
SECRET_KEY=abcdefghikjlmnopqrstuvwxyz
DEBUG=True
...
我尝试了许多这里建议的替代方案,但没有一个有效。
问题是您无法在设置设置之前导入模型。 因此,当您在设置文件的顶部导入模型时,您会收到错误,因为设置 object 尚未初始化,因此没有设置 SECRET_KEY 字段。
理想情况下,您根本不需要在设置中导入模型。 但是如果你必须把它们放在那里,你可以简单地将它们移到 SECRET_KEY 之后,但是......它可能仍然会导致问题。 我会尝试重构,以便您在设置文件中不需要它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.