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

cod*_*ter 242 python django

我是django-1.6的新手.当我运行django服务器时DEBUG = True,它运行得很好.但是,当我改变DEBUGFalse在设置文件,然后在服务器停止,并让在命令提示符下以下错误:

CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
Run Code Online (Sandbox Code Playgroud)

之后,我改变了ALLOWED_HOSTS["http://127.0.0.1:8000",],在浏览器中我得到的错误:

Bad Request (400)
Run Code Online (Sandbox Code Playgroud)

没有调试模式可以运行Django吗?

Mar*_*ers 403

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

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
Run Code Online (Sandbox Code Playgroud)

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

ALLOWED_HOSTS = ['*']
Run Code Online (Sandbox Code Playgroud)

引用文档:

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

大胆强调我的.

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

  • @MegaBytes当DEBUG为False时,所有静态文件都是从STATIC_ROOT提供的,所以``/manage.py collectstatic`可能会这样做. (8认同)
  • 谢谢它的工作,但是当我设置False时,会出现一个问题,因为所有静态文件都显示为404.我无法理解为什么它没有找到 (3认同)

Kei*_*ith 6

对我来说,由于未设置USE_X_FORWARDED_HOST为 true ,我收到了此错误。从文档:

仅当使用设置此标头的代理时才应启用此功能。

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


Yus*_*sef 5

我遇到了同样的问题,但没有一个答案解决了我的问题,为了解决这种情况,最好通过将以下配置添加到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, }, }, }
Run Code Online (Sandbox Code Playgroud)

并尝试tail -f /tmp/debug.log。当你看到你的问题时,你可以比盲目调试更容易处理。

我的问题即将

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

并通过添加proxy_set_header Host $host;到 Nginx 配置文件并USE_X_FORWARDED_PORT = Truesettings.py( 这是因为在我的情况下我已经在 Nginx 上监听了端口上的请求8080并将其传递给guni上端口来解决它8000