Django无效的HTTP_HOST标头:'testserver'。您可能需要将u'testserver'添加到ALLOWED_HOSTS

时间:2017-05-25 15:29:20

标签: python django

我开始学习Django,我正在实施“测试视图”功能。 当我在shell中使用测试客户端时,异常发生如下。

  

无效的HTTP_HOST标头:'testserver'。您可能需要将u'testserver'添加到ALLOWED_HOSTS。

我在shell中运行命令如下。

>>> from django.test.utils import setup_test_environment
>>> setup_test_environment()
>>> from django.test import Client
>>> client = Client()
>>> response = client.get('/')
>>> response.status_code
400

在教程中,应该出现404,但我得到400。 当我按如下方式继续运行命令时,发生了同样的异常。

>>> response = client.get(reverse('polls:index'))
>>> response.status_code
400

但结果必须是200.我想我应该在 settings.py 中声明 ALLOWED_HOSTS ,但我该怎么办? 我使用 $ python manage.py runserver 在localhost上运行服务器。

我想知道原因和解决方案。

以下是settings.py。

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
SECRET_KEY = '8v57o6wyupthi^#41_yfg4vsx6s($1$x0xmu*95_u93wwy0_&u'
DEBUG = True
ALLOWED_HOSTS = [127.0.0.1,'localhost']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls',
]
....    (MIDDLEWARE)
ROOT_URLCONF = 'tutorial.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'tutorial.wsgi.application'
....    (DATABASES, AUTH_PASSWORD_VALIDATORS)
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

8 个答案:

答案 0 :(得分:18)

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

这样说吧

之后重启服务器

答案 1 :(得分:6)

ALLOWED_HOSTS = ['XXX.iptime.org', 'localhost', '127.0.0.1', 'testserver']


# Application definition

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

答案 2 :(得分:2)

添加“testserver”、“localhost”或“127.0.0.1”对我不起作用(Django 3.1)。

用不同的服务器名称启动客户端是做什么的:

c = Client(SERVER_NAME='localhost')

答案 3 :(得分:1)

你应该这样编辑:

ALLOWED_HOSTS = [       '172.0.0.1',       'localhost' 的,       'TESTSERVER', ]

答案 4 :(得分:1)

您可以尝试进行测试

ALLOWED_HOSTS = ['*']

答案 5 :(得分:0)

settings.py处于只读模式

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

这是保存方法

答案 6 :(得分:0)

除了正确的答案外,还需要牢记重要的检查内容。使用单个值元组设置ALLOWED_HOSTS仍然会给您同样的错误,例如,如果您这样设置:

import './styles.css

它不起作用,因为您可能希望将其设为一个元组,但实际上它是Python中的字符串,是的,这很奇怪,但确实如此!您可以在这里了解有关元组的更多信息:tuples

如果要使其成为元组,则需要添加这样的逗号:

ALLOWED_HOSTS=('testserver')

这按预期工作。

答案 7 :(得分:0)

这对我有用
你可以试试这个:

ALLOWED_HOSTS += ['testserver']