刚开始学习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 www.example.com runserver 在localhost上运行服务器manage.py。
我想知道原因和解决办法。
以下是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
9条答案
按热度按时间o7jaxewo1#
在
settings.py
文件中编辑以下行:之后重新启动服务器
ozxc1zmp2#
wz8daaqr3#
添加'testserver','localhost',或'127.0.0.1'对我不起作用(Django〉3.1)。
使用不同的服务器名称启动客户端:
请注意,我得到一个错误,提到我需要添加'testserver',但我用'localhost'初始化客户端。
mcdcgff04#
你应该像这样编辑它:
ALLOWED_HOSTS = [ '127.0.0.1',' localhost','testserver',]
mklgxw1f5#
您可以尝试用于测试目的
xtfmy6hx6#
这对我很有效
你可以试试这个:
8ftvxx2r7#
settings.py 处于只读模式
这就是保存它的方法
9avjhtql8#
除了正确的答案,还有一个重要的检查需要记住。使用单值元组设置ALLOWED_HOSTS仍然会给予你同样的错误,例如,如果你这样设置:
它不起作用,因为你可能想让它成为一个元组,但实际上它是Python中的一个字符串,是的,这很奇怪,但这是真的!你可以在这里阅读更多关于元组的信息:元组
如果你想让它成为一个元组,你需要像这样添加一个逗号:
这和预期的一样。
qq24tv8q9#
在
settings.py
文件中,您可以简单地更新ALLOWED_HOSTS = ['*']
。但是,是的,您也可以使用其他人提供的解决方案,但为了保持简短,您可以使用此解决方案