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

jexiocij  于 2023-04-07  发布在  Go
关注(0)|答案(9)|浏览(121)

刚开始学习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
o7jaxewo

o7jaxewo1#

settings.py文件中编辑以下行:

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

之后重新启动服务器

ozxc1zmp

ozxc1zmp2#

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',
]
wz8daaqr

wz8daaqr3#

添加'testserver','localhost',或'127.0.0.1'对我不起作用(Django〉3.1)。
使用不同的服务器名称启动客户端:

c = Client(SERVER_NAME='localhost')

请注意,我得到一个错误,提到我需要添加'testserver',但我用'localhost'初始化客户端。

mcdcgff0

mcdcgff04#

你应该像这样编辑它:
ALLOWED_HOSTS = [ '127.0.0.1',' localhost','testserver',]

mklgxw1f

mklgxw1f5#

您可以尝试用于测试目的

ALLOWED_HOSTS = ['*']
xtfmy6hx

xtfmy6hx6#

这对我很有效

你可以试试这个:

ALLOWED_HOSTS += ['testserver']
8ftvxx2r

8ftvxx2r7#

settings.py 处于只读模式

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

这就是保存它的方法

9avjhtql

9avjhtql8#

除了正确的答案,还有一个重要的检查需要记住。使用单值元组设置ALLOWED_HOSTS仍然会给予你同样的错误,例如,如果你这样设置:

ALLOWED_HOSTS=('testserver')

它不起作用,因为你可能想让它成为一个元组,但实际上它是Python中的一个字符串,是的,这很奇怪,但这是真的!你可以在这里阅读更多关于元组的信息:元组
如果你想让它成为一个元组,你需要像这样添加一个逗号:

ALLOWED_HOSTS=('testserver',)

这和预期的一样。

qq24tv8q

qq24tv8q9#

settings.py文件中,您可以简单地更新ALLOWED_HOSTS = ['*']。但是,是的,您也可以使用其他人提供的解决方案,但为了保持简短,您可以使用此解决方案

相关问题