我使用的是 Django 1.6.5,设置如下:
DEBUG = True
当我切换到 DEBUG = False并运行 manage.py runserver时,会得到以下错误:
DEBUG = False
manage.py runserver
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False
我在下面的设置中得到了相同的错误:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
我该怎么补救?
试试看
ALLOWED_HOSTS = ['*']
如果你没有防火墙或者没有公共局域网,那么你的安全性就会降低,但是我用的就是这个,而且很有效。
编辑: 有趣的是,即使在 DEBUG = True的时候,我也需要在我的1.8个项目中添加这个。不知道为什么。
编辑: 这是由于在我的评论中提到的 Django 安全更新。
您的解决方案可能是添加原始 IP 和/或主机名:
ALLOWED_HOSTS = [ 'localhost', '127.0.0.1', '111.222.333.444', 'mywebsite.example']
需要满足的条件是主机头(如果启用了 USE_X_FORWARDED_HOST,则为 X-Forwarded-Host)应该匹配 ALLOWED_HOSTS中的一个值。
USE_X_FORWARDED_HOST
X-Forwarded-Host
ALLOWED_HOSTS
确保它没有在 setings.py 下面重新定义。默认设置如下:
ALLOWED_HOSTS = []
来自文档: Https://docs.djangoproject.com/en/1.10/ref/settings/
如果 DEBUG 为 False,还需要正确设置 ALLOWED _ HOSTS 不这样做将导致所有请求被返回 作为“坏请求(400)”。
从这里开始: Https://docs.djangoproject.com/en/1.10/ref/settings/#std:setting-allowed_hosts
我正在使用这样的东西:
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'www.mysite.com']
只需简单地注释掉这一行: ALLOWED _ HOSTS = [ ... ]
用这个:
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
如果您在 PyCharm中工作,请检查 Environmental variables中的 Django server。您应该指定适当的 module.settings文件
PyCharm
Environmental variables
Django server
module.settings
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = ['*']
值“ *”将匹配任何内容; 在这种情况下,您负责提供自己的 Host 标头验证。
这对我有用:
# SECURITY WARNING: don't run with debug turned on in production! DEBUG = False ALLOWED_HOSTS = ['localhost', '127.0.0.1']
我也经历过这个镜子。在这里尝试了所有的答案之后,我仍然不能找出问题所在,这就是我所做的:
127.0.0.1:8000/Quit
127.0.0.1:8000/admin
我已经设置了 ALLOW _ HOSTS、 INTERNAL _ IPS 和 DEBUG = TRUE
但还是有这个错误。 我的问题是,我已经创建了一个 Python 包,它的名称 是主应用程序中的“设置”。 而且这个包名干扰了‘ setings.py’文件。
此解决方案仅适用于使用不同的 settings.py并设置了环境变量的情况 我有同样的问题,但在我的情况下,问题是,我使用了一个不同的 settings.py文件比默认的(并注释了我的整个原始的 settings.py) ,虽然我有它在我的 manage.py正确配置,但在 PyCharm我必须配置它也在我的环境变量通过:
settings.py
manage.py
Edit Run Configurations >> Environment Variables
我也经历了同样的错误,发现它是由于设置文件配置更改发生。您必须像下面提到的那样配置一些东西。
在设置中
在经纪公司 Py
def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your-project-name>.settings')
在 asgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<your-project-name>.settings')
在 wsgi.py
在我的情况下,我把我的 settings.py拆分成 base.py和 development.py在一个设置文件夹。它看起来像这样:
base.py
development.py
<name-of-your-project-app>/ ├── __init__.py ├── asgi.py ├── settings │ ├── __init__.py │ ├── base.py │ └── development.py ├── urls.py └── wsgi.py
这个问题比 ALLOWED _ HOSTS = ... 大得多,因为 python manage.py runserver无法识别任何设置。
python manage.py runserver
修复方法是通过运行
export DJANGO_SETTINGS_MODULE=decoupled_dj.settings.development
我认为这告诉 Django,‘ Hey,在 development.py中查找我的设置’
因此,在 django 项目的主目录中,有两个名称相同的目录,所以我删除了设置文件夹,保留了 django 附带的 setings.py 文件。
我最初拥有的东西
<name-of-your-project-app>/ ├── __init__.py ├── asgi.py ├── settings │ ├── __init__.py │ ├── base.py │ └── development.py ├── settings.py ├── urls.py └── wsgi.py
我之后所拥有的
<name-of-your-project-app>/ ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py
确保目录的名称与 INSTALLED _ APPS 中提到的名称相同。这些有时是解决错误的方法。