首页 文章

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

提问于
浏览
218

我是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吗?

6 回答

  • 372

    我有同样的问题,我通过设置 ALLOWED_HOSTS = ['*'] 修复它,并解决静态图像的问题,你必须改变环境配置中的虚拟路径,如下所示:

    Virtual Path Directory

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

    我希望它对你有所帮助 .

    PD:抱歉我的英语不好 .

  • 1

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

    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 . 当你看到你的问题时,你可以比盲目的调试更容易处理它 .

    我的问题是

    Invalid HTTP_HOST header: 'pt_web:8000'. The domain name provided is not valid according to RFC 1034/1035.

    并通过将 proxy_set_header Host $host; 添加到Nginx配置文件并通过 settings.py 中的 USE_X_FORWARDED_PORT = True 启用端口转发来解决它('s because in my case I' ve在端口 8080 上的Nginx中侦听请求并将其传递到端口 8000 上的 guni

  • 0

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

  • 3

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

    ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
    

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

    ALLOWED_HOSTS = ['*']
    

    引用文档:

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

    大胆强调我的 .

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

  • -2

    对我来说,我没有将USE_X_FORWARDED_HOST设置为true而得到此错误 . 来自文档:

    只有在设置此标头的代理正在使用时才应启用此选项 .

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

  • 3

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

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

相关问题