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

Posted

技术标签:

【中文标题】Django 无效的 HTTP_HOST 标头:\'testserver\'。您可能需要将 u\'testserver\' 添加到 ALLOWED_HOSTS【英文标题】:Django Invalid HTTP_HOST header: 'testserver'. You may need to add u'testserver' to ALLOWED_HOSTSDjango 无效的 HTTP_HOST 标头:'testserver'。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS 【发布时间】: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' ] 【参考方案1】:

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

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

之后重启你的服务器

【讨论】:

在文件 settings.py 中【参考方案2】:
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',
]

【讨论】:

更多信息在这里是链接 - docs.djangoproject.com/en/1.11/ref/settings/#allowed-hosts【参考方案3】:

你应该这样编辑它:

ALLOWED_HOSTS = [ '127.0.0.1', '本地主机', '测试服务器', ]

【讨论】:

你有'172.0.0.1',但它应该是'127.0.0.1'【参考方案4】:

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

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

c = Client(SERVER_NAME='localhost')

请注意,我收到一条错误消息,提示我需要添加“testserver”,但我使用“localhost”启动客户端。

【讨论】:

【参考方案5】:

您可以尝试用于测试目的

ALLOWED_HOSTS = ['*']

【讨论】:

【参考方案6】:

settings.py 处于只读模式

ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

这是保存方法

【讨论】:

如果文件是只读模式,那么在ubuntu中使用终端移动到路径并尝试sudo su和gedit settings.py【参考方案7】:

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

ALLOWED_HOSTS=('testserver')

它不起作用,因为你可能想把它变成一个元组,但实际上它是 Python 中的一个字符串,是的,这很奇怪,但确实如此!您可以在此处阅读有关元组的更多信息:tuples。

如果你想让它成为一个元组,你需要像这样添加一个逗号:

ALLOWED_HOSTS=('testserver',)

这按预期工作。

【讨论】:

【参考方案8】:

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

ALLOWED_HOSTS += ['testserver']

【讨论】:

以上是关于Django 无效的 HTTP_HOST 标头:'testserver'。您可能需要将 u'testserver' 添加到 ALLOWED_HOSTS的主要内容,如果未能解决你的问题,请参考以下文章

避免使用 Django + Elastic Beanstalk 获得“无效的 HTTP_HOST 标头:'localhost'”消息

Django 错误:无效的 HTTP_HOST 标头:u'/run/myprojectname/gunicorn.sock:'

Django 无效的 HTTP_HOST 标头 Elastic Beanstalk

无效的http_host标头

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

将 django 站点从 http 升级到 https 后,我不断收到“无效的 HTTP_HOST 标头”错误电子邮件