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

ImageField图片上传测试返回400而非200,原因何在?

问题分析与解决

测试用例返回400错误但手动上传正常,核心问题出在测试代码的文件处理和请求参数上:

  • 文件打开模式错误:图片属于二进制文件,你用默认文本模式open()打开会损坏文件内容,导致后端is_valid_image验证失败,返回400。必须用二进制模式rb打开图片文件。
  • content_type参数设置错误:手动指定content_type="multipart"不符合规范,Django测试客户端处理文件上传时,只要正确传递文件对象,会自动设置正确的multipart/form-data类型,手动指定反而会导致请求格式异常。

修改后的测试代码:

def test_profile_pic_upload_png(self):
    self.register_user()
    self.login_user()
    # 用二进制模式打开图片文件
    with open("./test_files/test.png", "rb") as f:
        response = self.client.post(
            "/upload_profile_pic/",
            {'profile_pic': f},
            HTTP_X_REQUESTED_WITH='XMLHttpRequest'
            # 移除错误的content_type参数
        )
        self.assertEqual(response.status_code, 200)

额外排查建议:

  • 确认test.png的文件路径在测试环境中能被正常读取。
  • 可以打印response.content查看具体错误提示(比如返回的JSON信息),进一步定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:35:03