DisallowedHost at /login
Invalid HTTP_HOST header: ‘192.168.1.37:8000’. You may need to add ‘192.168.1.37’ to ALLOWED_HOSTS.
Request Method: GET
Request URL: http://192.168.1.37:8000/login
Django Version: 2.2.7
Exception Type: DisallowedHost
出现这个报错的时候,第一个方法是关闭CSRF防护,在setting里注释掉第三行。
MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
#‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’,
]
然后就会报下面的错:
Forbidden (CSRF token missing or incorrect.)
在form后面加上{% csrf_token %} 就可以了
用户名:<form method="post" action="/login_check"> {% csrf_token %}
<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
原理:
在渲染页面的时候,会将 {% csrf_token %} 替换成
这个隐藏域;
服务器交给浏览器保存一个名字为csrftoken的cookie信息;
提交表单时,两个值都会发给服务器进行对比,如果一样,csrf验证通过,否则失败。
但是,关闭CSRF是不安全的,还是把setting里的注释取消,将ALLOWED_HOSTS = [’’] 改为
ALLOWED_HOSTS = [’*’]
允许所有的主机,或是将自己电脑的ip地址加入ALLOWED_HOSTS = [’*’]中,这个方法也可以。