Python Django:配置不正确:密钥设置不能为空
我正在尝试设置多个设置文件(开发、生产等),其中包括一些基本设置。但是,我不能成功。当我尝试运行Python Django:配置不正确:密钥设置不能为空,python,django,settings,Python,Django,Settings,我正在尝试设置多个设置文件(开发、生产等),其中包括一些基本设置。但是,我不能成功。当我尝试运行/manage.py runserver时,出现以下错误: (cb)clime@den /srv/www/cb $ ./manage.py runserver ImproperlyConfigured: The SECRET_KEY setting must not be empty. 这是我的设置模块: (cb)clime@den /srv/www/cb/cb/settings $ ll tota
/manage.py runserver
时,出现以下错误:
(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.
这是我的设置模块:
(cb)clime@den /srv/www/cb/cb/settings $ ll
total 24
-rw-rw-r--. 1 clime clime 8230 Oct 2 02:56 base.py
-rw-rw-r--. 1 clime clime 489 Oct 2 03:09 development.py
-rw-rw-r--. 1 clime clime 24 Oct 2 02:34 __init__.py
-rw-rw-r--. 1 clime clime 471 Oct 2 02:51 production.py
基本设置(包含密钥):
manage.py中的代码
:
(cb)clime@den /srv/www/cb $ cat manage.py
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cb.settings.development")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
如果我将从基本导入*
添加到/srv/www/cb/cb/settings/\uu init\uuuuuuuuuuuupy
(否则为空),它会神奇地开始工作,但我不明白为什么。有人能告诉我这里发生了什么吗?这一定是python模块的魔力
编辑:如果我从base.py中删除这一行,一切都会开始工作
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
如果我从web.templatetags.cb_标记中删除这一行,它也会开始工作:
from endless_pagination.templatetags import endless
我想这是因为,最终,它会导致
from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)
因此,它创建了一些奇怪的循环内容,游戏结束了。它开始工作,因为在base.py上,基本设置文件中包含了所需的所有信息。你需要排队:
SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&022shmi1jcgihb*'
因此,当您从基本导入*执行操作时,它会将密钥导入您的development.py
在进行任何自定义设置之前,应始终导入基本设置
编辑:
另外,当django从包中导入开发时,它会初始化base中的所有变量,因为您在\uuuu init\uuuuuuy.py
中定义了自base import*
以来,我遇到了相同的错误,它是由设置加载的模块或类与设置模块本身之间的循环依赖关系。在我的例子中,它是一个在设置中命名的中间件类,它自己试图加载设置。我通过停用所有到virtualenv的活动会话并再次启动,解决了在使用Django 1.5和1.6的OS X上出现的这个问题。我只想补充一点,当我的数据库名称在我的settings.py
文件,因此无法创建数据库。根据Daniel Greenfield的书《Django的两个勺子》中的说明重新构造设置后,我遇到了相同的问题
from .base import *
env_name = os.getenv('ENV_NAME', 'local')
if env_name == 'prod':
from .prod import *
elif env_name == 'stage':
from .stage import *
else:
from .local import *
我通过设置
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings.local")
在manage.py
和wsgi.py
中
更新:
在上面的解决方案中,local
是我的设置文件夹中的文件名(settings/local.py),其中保存了本地环境的设置
解决此问题的另一种方法是将所有常用设置保留在settings/base.py中,然后为生产、暂存和开发环境创建3个单独的设置文件
您的设置文件夹将如下所示:
settings/
__init__.py
base.py
local.py
prod.py
stage.py
并将以下代码保存在设置/\uuuu init\uuuuuu.py
from .base import *
env_name = os.getenv('ENV_NAME', 'local')
if env_name == 'prod':
from .prod import *
elif env_name == 'stage':
from .stage import *
else:
from .local import *
我在python manage.py runserver
中遇到了相同的错误
对我来说,原来是因为一个陈旧的编译二进制(.pyc)文件。删除项目中的所有此类文件后,服务器再次开始运行。:)
因此,如果你不知从何处得到这个错误,也就是说,没有做任何看起来与django设置相关的更改,这可能是一个很好的第一个措施。我在1.8.4中解决了这个问题,修复了有拼写错误的模板设置(删除模板['debug']解决了它)
检查您最近更改的设置,确保所有键都在手册中。我认为这是环境错误,您应该尝试设置:DJANGO\u settings\u MODULE='corrective\u settings'
我没有指定设置文件:
python manage.py runserver --settings=my_project.settings.develop
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('MY_SERVER_ENV_VAR_NAME')
删除.pyc文件
用于删除.pyc的Ubuntu终端命令:
find-名称“*.pyc”-exec rm-rf{}\代码>
我在执行python manage.py runserver时遇到了相同的错误。这是因为.pyc文件。我从项目目录中删除了.pyc文件,然后它就开始工作了。我通过删除.env
文件中等号(=
)周围的空格来解决这个问题。为了将另一个可能的解决方案加入到这个组合中,我在项目目录中有一个settings
文件夹和一个settings.py
。(我正在从基于环境的设置文件切换回一个文件。此后我重新考虑过。)
Python对我是想导入project/settings.py
还是project/settings/\uuuu init\uuuu.py
感到困惑。我删除了settings
dir,现在一切正常。在我的情况下,问题是-我的app\u文件夹中有和settings.py
。然后我决定在app\u文件夹中创建Settings文件夹
——这与Settings.py
产生了冲突。刚刚重新命名了设置文件夹
,一切正常。我对芹菜也有同样的问题。之前的My setting.py:
之后:
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', <YOUR developing key>)
SECRET\u KEY=os.environ.get('DJANGO\u SECRET\u KEY',)
如果未定义环境变量,则:SECRET\u KEY=您的开发密钥对于任何使用PyCharm的人:绿色的“运行所选配置”按钮将产生此错误,但运行以下操作:
py manage.py runserver 127.0.0.1:8000--settings=app\u name.settings.development
要解决此问题,您需要编辑配置的环境变量。为此,请单击绿色运行按钮左侧的“选择运行/调试配置”下拉菜单,然后单击“编辑配置”。在“环境”选项卡下,将环境变量DJANGO\u SETTINGS\u MODULE
更改为app\u name.SETTINGS.development
在设置目录的init.py中写入正确的导入,如:
from Project.settings.base import *
无需更改wsgi.py或manage.py我的Mac OS不喜欢在设置文件中找不到env变量集:
python manage.py runserver --settings=my_project.settings.develop
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('MY_SERVER_ENV_VAR_NAME')
但是在将env var添加到本地Ma之后
export MY_SERVER_ENV_VAR_NAME ='fake dev security key that is longer than 50 characters.'
python3 manage.py check --deploy --settings myappname.settings.production
LANGUAGES = (
('en-gb', get_text_noop('British English')),
('fr', get_text_noop('French')),
)
from django.utils.translation import gettext_lazy as _
LANGUAGES = (
('en-gb', _('British English')),
('fr', _('French')),
)
SECRET_KEY=os.environ.get('SECRET_KEY')
SECRET_KEY = '(i9b4aes#h1)m3h_8jh^duxrdh$4pu8-q5vkba2yf$ptd1lev_'
jobs:
build:
env:
VAR1: 1
VAR2: 5
settings/
__init__.py
base.py
local.py
production.py
from .base import *
if os.environ.get('DJANGO_DEVELOPMENT')=='prod':
from .production import *
else:
from .local import *
SECRET_KEY, ALLOWED_HOSTS,INSTALLED_APPS,MIDDLEWARE .. etc....
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'database',
'USER': 'postgres',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '5432',
}
}
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourProject.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'yourProject.settings.dev')
SECRET_KEY = 'it5bs))q6toz-1gwf(+j+f9@rd8%_-0nx)p-2!egr*y1o51=45XXCV'
django.setup()