CommandError: 如果 DEBUG 为 False,则必须设置 setings.ALLOWED_HOSTS

我使用的是 Django 1.6.5,设置如下:

DEBUG = True

当我切换到 DEBUG = False并运行 manage.py runserver时,会得到以下错误:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False

我在下面的设置中得到了相同的错误:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

我该怎么补救?

265023 次浏览

试试看

ALLOWED_HOSTS = ['*']

如果你没有防火墙或者没有公共局域网,那么你的安全性就会降低,但是我用的就是这个,而且很有效。

编辑: 有趣的是,即使在 DEBUG = True的时候,我也需要在我的1.8个项目中添加这个。不知道为什么。

编辑: 这是由于在我的评论中提到的 Django 安全更新。

您的解决方案可能是添加原始 IP 和/或主机名:

ALLOWED_HOSTS = [
'localhost',
'127.0.0.1',
'111.222.333.444',
'mywebsite.example']

需要满足的条件是主机头(如果启用了 USE_X_FORWARDED_HOST,则为 X-Forwarded-Host)应该匹配 ALLOWED_HOSTS中的一个值。

确保它没有在 setings.py 下面重新定义。默认设置如下:

ALLOWED_HOSTS = []

来自文档: Https://docs.djangoproject.com/en/1.10/ref/settings/

如果 DEBUG 为 False,还需要正确设置 ALLOWED _ HOSTS 不这样做将导致所有请求被返回 作为“坏请求(400)”。

从这里开始: Https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-allowed_hosts

我正在使用这样的东西:

ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'www.mysite.com']

只需简单地注释掉这一行: ALLOWED _ HOSTS = [ ... ]

用这个:

ALLOWED_HOSTS =  ['localhost', '127.0.0.1']

如果您在 PyCharm中工作,请检查 Environmental variables中的 Django server。您应该指定适当的 module.settings文件

试试看

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True


ALLOWED_HOSTS = ['*']

值“ *”将匹配任何内容; 在这种情况下,您负责提供自己的 Host 标头验证。

这对我有用:

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False


ALLOWED_HOSTS = ['localhost', '127.0.0.1']

我也经历过这个镜子。在这里尝试了所有的答案之后,我仍然不能找出问题所在,这就是我所做的:

  1. 例如 Cd project-dir
  2. 我迁移了
  3. 我创建了一个超级用户
  4. 输入所需的信息,如用户名、密码、电子邮件等
  5. 您应该得到一个“超级用户创建成功”的响应
  6. 现在运行服务器
  7. 单击显示的 URL
  8. 浏览器上的 URL 应该是这样的,127.0.0.1:8000/Quit
  9. 现在将浏览器上的 URL 编辑为 127.0.0.1:8000/admin
  10. 您应该会看到一个管理登录页面
  11. 使用前面创建的超级用户信息登录
  12. 你应该登录到姜戈管理层
  13. 现在点击页面顶部的“查看网站”
  14. 您应该看到一个页面,其中显示“安装成功... ... Debug = True”
  15. 瞧,你的服务器运行正常

我已经设置了 ALLOW _ HOSTS、 INTERNAL _ IPS 和 DEBUG = TRUE

但还是有这个错误。 我的问题是,我已经创建了一个 Python 包,它的名称 是主应用程序中的“设置”。 而且这个包名干扰了‘ setings.py’文件。

如果你正在使用 PyCharm

此解决方案仅适用于使用不同的 settings.py并设置了环境变量的情况

我有同样的问题,但在我的情况下,问题是,我使用了一个不同的 settings.py文件比默认的(并注释了我的整个原始的 settings.py) ,虽然我有它在我的 manage.py正确配置,但在 PyCharm我必须配置它也在我的环境变量通过:

Edit Run Configurations >> Environment Variables

enter image description here

我也经历了同样的错误,发现它是由于设置文件配置更改发生。您必须像下面提到的那样配置一些东西。

试试看

在设置中

ALLOWED_HOSTS = ['*']

在经纪公司 Py

def main():
"""Run administrative tasks."""
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your-project-name>.settings')


在 asgi.py

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your-project-name>.settings')

在 wsgi.py

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your-project-name>.settings')

在我的情况下,我把我的 settings.py拆分成 base.pydevelopment.py在一个设置文件夹。它看起来像这样:

<name-of-your-project-app>/
├── __init__.py
├── asgi.py
├── settings
│   ├── __init__.py
│   ├── base.py
│   └── development.py
├── urls.py
└── wsgi.py

这个问题比 ALLOWED _ HOSTS = ... 大得多,因为 python manage.py runserver无法识别任何设置。

修复方法是通过运行

export DJANGO_SETTINGS_MODULE=decoupled_dj.settings.development

我认为这告诉 Django,‘ Hey,在 development.py中查找我的设置’

因此,在 django 项目的主目录中,有两个名称相同的目录,所以我删除了设置文件夹,保留了 django 附带的 setings.py 文件。

我最初拥有的东西

<name-of-your-project-app>/
├── __init__.py
├── asgi.py
├── settings
│   ├── __init__.py
│   ├── base.py
│   └── development.py
├── settings.py
├── urls.py
└── wsgi.py

我之后所拥有的

<name-of-your-project-app>/
├── __init__.py
├── asgi.py
├── settings.py
├── urls.py
└── wsgi.py

确保目录的名称与 INSTALLED _ APPS 中提到的名称相同。这些有时是解决错误的方法。