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
相关产品推荐
相关产品推荐

