62

我的简单manage.py runserverDjango应用程序在调试模式(Bad Request (400)查看(无论是在我的应用程序中还是在 Django 管理员中。

在哪里可以找到有关此的调试信息?什么都没有出现/var/log/apache2/error.log,即使是LogLevel=info. 我检查了版本,记录了请求环境(参见ModWSGI 调试提示),没有发现重大差异。

我剩下的一个想法是,我正在使用基于 Python 2.7.1 构建的 Ubuntu 12.04 (libapache2-mod-wsgi 3.3-4build1) 的 mod_wsgi;我有 Python 2.7.3。而 Django 是 1.6,比 Ubuntu Precise 版本更新。我犹豫是否开始从源代码构建软件包,因为清理起来非常困难,而且这些看起来像是次要的版本更改......

谢谢您的帮助。

(供参考,这里是 Apache 配置和 WSGI 应用程序)

Apache 配置(000-默认)

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    WSGIScriptAlias /rz /usr/local/share/rz/rz.wsgi
    ...

rz.WSGI 应用程序

import os
import sys
import django.core.handlers.wsgi
import pprint

path = '/usr/local/share/rz'
if path not in sys.path:
    sys.path.insert(0, path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'rz.settings'

class LoggingMiddleware:
    def __init__(self, application):
        self.__application = application

    def __call__(self, environ, start_response):
        errors = environ['wsgi.errors']
        pprint.pprint(('REQUEST', environ), stream=errors)

        def _start_response(status, headers, *args):
            pprint.pprint(('RESPONSE', status, headers), stream=errors)
            return start_response(status, headers, *args)

        return self.__application(environ, _start_response)

application = LoggingMiddleware(django.core.handlers.wsgi.WSGIHandler())
4

3 回答 3

108

像这样将 ALLOWED_HOSTS 设置添加到您的 settings.py 中......

ALLOWED_HOSTS = [
    '.example.com', # Allow domain and subdomains
    '.example.com.', # Also allow FQDN and subdomains
]

我遇到了同样的问题,并在文档中找到了答案

更新:django 1.6 文档不再在线,我更新了链接到 django 1.7 文档进行ALLOWED_HOSTS设置。

于 2013-12-16T19:03:03.537 回答
9

如果您已明确设置ALOWED_HOSTS- 请确保您的主机名不包含下划线。这在技术上是非法的。

我不得不打印出各种功能,它归结为这个正则表达式未能检测到一个域django.http

host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9:]+\])(:\d+)?$")

事实上,我的域中有一个下划线。

于 2014-11-04T08:35:47.990 回答
1

不是解决方案,但出于调试目的,您可以像这样在 settings.py 中设置 ALLOWED_HOSTS 设置

ALLOWED_HOSTS = ['*']

它绝对应该有效。如果没有,至少你会知道问题不在于 Django 拒绝访问给定的 url。

于 2014-12-16T10:04:28.617 回答