当DEBUG = False时,Django给出Bad Request(400)

时间:2013-11-09 12:11:41

标签: python django

我是django-1.6的新手。当我用DEBUG = True运行django服务器时,它运行得很好。但是当我在设置文件中将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?

11 个答案:

答案 0 :(得分:388)

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

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

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

ALLOWED_HOSTS = ['*']

引用文档:

  

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

大胆强调我的

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

答案 1 :(得分:3)

我遇到了同样的问题,我通过设置ALLOWED_HOSTS = ['*']解决了问题,并解决了静态图像的问题,你需要更改环境配置中的虚拟路径,如下所示:

虚拟路径目录

/静态/的/ opt /蟒蛇/电流/应用/ yourpj /静态/
/ media / / opt / python / current / app / Nuevo / media /

我希望它可以帮到你。

PD:抱歉我的英语不好。

答案 2 :(得分:3)

对我来说,我没有将USE_X_FORWARDED_HOST设置为true,从而出现此错误。来自文档:

  

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

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

答案 3 :(得分:1)

我遇到了同样的问题,没有一个答案可以解决我的问题,为解决这种情况,最好通过在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, }, }, }

,然后尝试tail -f /tmp/debug.log。 而且当您看到问题时,比盲目调试要容易得多。

我的问题即将

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

并通过向Nginx配置文件中添加proxy_set_header Host $host;并通过USE_X_FORWARDED_PORT = True中的settings.py启用端口转发来解决此问题(这是因为在我的情况下,我已经在端口上的Nginx中侦听了请求8080并将其传递到端口guni上的8000

答案 4 :(得分:1)

在你项目的 settings.py 中,检查第 28 行,允许主机在哪里

settings.py


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

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

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

ALLOWED_HOSTS = ['*']

答案 5 :(得分:0)

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

否则您可能会收到来自django的错误请求(400)错误。

答案 6 :(得分:0)

对我来说,因为我已经在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)错误的请求 enter image description here

所以我将URL更改为127.0.1.1 :(使用的端口)/项目 和瞧!

您必须检查您的虚拟网络地址是什么,对我来说,因为我在Linux上使用bitnami django堆栈2.2.3-1,所以我可以检查django使用的端口。 如果您有一个错误(400错误的请求),那么我猜django在不同的虚拟网络上.. 祝好运 enter image description here

答案 7 :(得分:0)

尝试使用--insecure运行服务器,如下所示:

python manage.py runserver-不安全

答案 8 :(得分:0)

我必须先停止apache服务器。

(例如sudo systemctl stop httpd.service / sudo systemctl disable httpd.service)。

除了编辑“ settings.py”文件外,这还解决了我的问题

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

答案 9 :(得分:0)

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

答案 10 :(得分:-2)

导航到设置并找到base.py文件 将允许的主机设置为  ALLOWED_HOSTS = ['*']