【发布时间】:2017-10-26 07:49:35
【问题描述】:
我开始学习 Django,我正在实现“测试视图”功能。 当我在shell中使用test Client时,出现了如下异常。
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
【问题讨论】:
-
你的调试是假的吗?
-
感谢您与我联系。是的,调试是错误的
-
然后在允许的主机里面放 127.0.0.1,localhost 并检查
-
我应该在 settings.py 文件中声明 ALLOWED_HOSTS 吗?
-
调试后有一个允许的主机变量,在里面放它,如果你没有它,用全部大写声明它,然后把 2 放在里面,如 ALLOWED_HOSTS=[127.0.0.1,'localhost' ]