You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django测试Client访问带双斜杠无效URL返回200而非404问题

Django测试Client双斜杠路径返回结果与实际请求不一致问题说明

核心结论

该差异是Django测试Client默认的URL解析逻辑导致的特性表现,既不是Client的bug,也不是使用方式错误,只需调整测试参数即可对齐实际请求的行为。

差异原因

  • 实际开发服务器请求逻辑:
    浏览器访问localhost:8000//index.html时,传递给Django的原始路径为//index.html,路由系统直接匹配该原始路径,无对应URL规则时返回404,属于预期行为。
  • 测试Client默认请求逻辑:
    django.test.Client的get方法默认会对传入的路径做标准化解析:当传入以两个斜杠开头、不带http/https前缀的字符串时,Python标准库的urlparse工具会将双斜杠后的内容识别为域名段(netloc),路径段被解析为空值,最终Client会将空路径转换为根路径/发起请求,因此返回和访问/完全一致的200响应。

修复方案

如果需要测试原始路径的路由匹配逻辑,调用get方法时添加raw_path=True参数即可跳过默认的URL解析步骤,直接使用传入的原始路径发起请求,修改后的测试代码如下:

def test_invalid_url2(self):
    response = self.client.get('//index.html', raw_path=True)
    self.assertEqual(response.status_code, 404)

内容的提问来源于stack exchange,提问作者Bon Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:27:01