基于Djoser的Django用户激活出现400 Bad Request错误求助
解决Djoser用户激活时的Invalid HTTP_HOST header问题
问题分析
你遇到的Invalid HTTP_HOST header: '1.0.0.127.in-addr.arpa:8000'错误,源于localhost被反向DNS解析成了这个特殊域名,导致请求的Host头不符合Django的ALLOWED_HOSTS配置。即便将该域名添加到ALLOWED_HOSTS,也可能因解析或请求头的底层问题无法生效。
解决方案
1. 强制指定请求Host头(最快见效)
在Postman的激活请求中手动添加Host头:
- 切换到请求的Headers标签页
- 添加键为
Host、值为localhost:8000的头信息 - 重新发送激活请求
2. 临时放宽ALLOWED_HOSTS(仅开发环境)
修改settings.py中的配置:
ALLOWED_HOSTS = ['*']
⚠️ 注意:此方法仅用于本地开发测试,生产环境绝对禁止使用,会引发安全风险。
3. 修正本地DNS映射
检查系统hosts文件,确保localhost与127.0.0.1正确绑定:
- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts
添加或确认以下内容:
127.0.0.1 localhost ::1 localhost
4. 指定Django服务绑定地址
启动服务时明确绑定到127.0.0.1,避免默认的0.0.0.0引发解析问题:
python manage.py runserver 127.0.0.1:8000
额外优化点
你的UserAccount模型中is_active默认设为True,但Djoser的标准激活逻辑是将未激活用户的is_active从False改为True。如果后续激活成功但用户状态不符合预期,建议修改默认值:
is_active = models.BooleanField(default=False)
内容的提问来源于stack exchange,提问作者alpha_sigma
相关产品推荐
相关产品推荐

