287

我是 django-1.6 的新手。当我使用 运行 django 服务器时DEBUG = True,它运行良好。但是当我在设置文件中更改DEBUG为时False,服务器停止并在命令提示符下给出以下错误:

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

更改ALLOWED_HOSTS为后["http://127.0.0.1:8000",],在浏览器中出现错误:

Bad Request (400)

是否可以在没有调试模式的情况下运行 Django?

4

10 回答 10

467

ALLOWED_HOSTS列表应包含完全限定的主机名而不是url。省略端口和协议。如果您正在使用127.0.0.1,我也会添加localhost到列表中:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

您还可以使用*匹配任何主机:

ALLOWED_HOSTS = ['*']

引用文档:

此列表中的值可以是完全限定名称(例如'www.example.com'),在这种情况下,它们将与请求的Host标头完全匹配(不区分大小写,不包括 port)。以句点开头的值可用作子域通配符:'.example.com'将匹配example.comwww.example.com和 的任何其他子域example.com。的值'*'将匹配任何东西;在这种情况下,您有责任提供自己的Host标头验证(可能在中间件中;如果是这样,则此中间件必须在 中首先列出MIDDLEWARE_CLASSES)。

大胆强调我的。

您获得的状态 400 响应是由于当您的主机标头与该列表中的任何值都不匹配时引发的SuspiciousOperation异常。

于 2013-11-09T12:14:22.500 回答
8

我有同样的问题,没有一个答案能解决我的问题。为了解决这种情况,最好通过settings.py临时添加以下配置来启用日志记录。

LOGGING = {
   'version': 1,
   'disable_existing_loggers': False,
   'handlers': {
      'file': {
         'level': 'DEBUG',
         'class': 'logging.FileHandler',
         'filename': '/tmp/debug.log',
      },
   },
   'loggers': {
      'django': {
         'handlers': ['file'],
         'level': 'DEBUG',
         'propagate': True,
      },
   },
}

当你看到问题时,它比盲目调试更容易处理。

我的问题是:

无效的 HTTP_HOST 标头:'pt_web:8000'。根据 RFC 1034/1035,提供的域名无效。

我通过添加proxy_set_header Host $host;到 Nginx 配置文件并启用端口转发来USE_X_FORWARDED_PORT = True解决它settings.py(这是因为在我的情况下,我正在监听 Nginx 端口上的请求8080并传递给gunion port 8000)。

于 2018-07-22T06:51:13.797 回答
7

USE_X_FORWARDED_HOST对我来说,我没有设置为 true就得到了这个错误。从文档:

只有在使用设置此标头的代理时才应启用此功能。

我的托管服务在他们的文档中明确写道,必须使用此设置,如果我忘记了,我会收到此 400 错误。

于 2016-07-30T22:41:48.787 回答
3

我有同样的问题,我通过设置ALLOWED_HOSTS = ['*']和解决静态图像的问题来解决它,你必须像这样更改环境配置中的虚拟路径:

虚拟路径                 目录

/static/ /opt/python/current/app/yourpj/static/
/media/ /opt/python/current/app/Nuevo/media/

我希望它对你有帮助。

PD:对不起我的英语不好。

于 2015-07-25T20:37:21.953 回答
2

在项目的 settings.py 中,检查第 28 行,其中 Allows Host

设置.py


ALLOWED_HOSTS = ['IP', 'servidor', ]

你必须把你使用的IP和服务器,级别本地或网络设置.py

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

或者

ALLOWED_HOSTS = ['*']
于 2021-02-03T16:21:01.890 回答
1

DEBUG = False您的设置文件中,您还需要设置 ALLOWED_HOST 列表。尝试包括ALLOWED_HOST = ['127.0.0.1', 'localhost', 'www.yourdomain.com']

否则你可能会收到来自 django 的 Bad Request(400) 错误。

于 2017-04-19T08:50:40.117 回答
1

对我来说,因为我已经在 127.0.0.1 上安装了 xampp,在 127.0.1.1 上安装了 django,我一直在尝试添加主机

ALLOWED_HOSTS = ['127.0.0.1', 'localhost', 'www.yourdomain.com', '*', '127.0.1.1']

我得到了同样的错误或(400)错误请求 在此处输入图像描述

所以我将 url 更改为 127.0.1.1:(the used port)/project ,瞧!

你必须检查你的虚拟网络地址是什么,因为我在 Linux 上使用 bitnami django stack 2.2.3-1 我可以检查 django 正在使用哪个端口。如果你有一个错误(400 bad request)那么我猜django在不同的虚拟网络上..祝你好运 在此处输入图像描述

于 2019-07-04T15:11:19.647 回答
0

我必须先停止 apache 服务器。

(fe sudo systemctl stop httpd.service/ sudo systemctl disable httpd.service)。

settings.py除了编辑' '文件之外,这解决了我的问题

ALLOWED_HOSTS = ['se.rv.er.ip', 'www.example.com']

于 2020-06-11T06:09:24.703 回答
0

试试manage.py collectstatic。更新后我丢失了一个静态文件,因此请求错误。

于 2021-08-06T16:55:15.780 回答
-2

尝试使用--insecure标志运行您的服务器,就像这样:

python manage.py runserver --insecure
于 2019-09-14T20:59:28.187 回答