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()