gpt4 book ai didi

Django 1.7 ImageField 表单验证

转载 作者:行者123 更新时间:2023-12-03 21:28:30 24 4
gpt4 key购买 nike

我正在使用 Django 1.7 和 Python 3.4 编写单元测试。当 file_data 元素被注释掉时,下面的表单验证正常。包含 file_data 它不会验证并且测试失败。

from django.core.files.uploadedfile import SimpleUploadedFile
...

data = {
'phone_number': '123456',
'job': Job.objects.latest('id').pk,
}
file_data = {
'portrait': SimpleUploadedFile(
content=b'',
content_type='image/jpeg',
name='test.jpg',
)
}
form = PersonForm(data, file_data)
self.assertTrue(form.is_valid())

类似的代码适用于我网站其他地方的 FileField 上传测试。在 shell 中运行代码我在 form.errors 中得到以下内容: 'Upload a valid image. The file you uploaded was either not an image or a corrupted image.' 因此我认为问题在于 contentcontent_type 字段。我试过在 this answer 中使用 image-as-a-string 无济于事。 [编辑:图像作为字符串的方法实际上是答案,但我一定是实现得很糟糕。接受的答案已验证有效。] 我在 SimpleUloadedFile source code 中找不到任何线索。

该表单在现实中运行良好,但我想确保它包含在 future 维护的工作测试中。理想情况下,我想避免必须有一个实际的 test.jpg 文件,因为图像在我的 .gitignore 文件中,我不想开始破解目前非常流畅的自动化部署。

我应该给 SimpleUploadedFile 什么输入才能正确验证?

最佳答案

运行Image有什么区别吗?你的测试服和你的工作代码之间的lib?可以Image lib 能正确处理GIF 等文件吗?您可能需要查看 PIL/pillow安装也是如此。

SimpleUploadedFile(name='foo.gif', 
content=b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00')

为我工作。

表单内部依赖 forms.ImageField在其 to_python() 中测试图像,像这样:
import io
from django.utils.image import Image
Image.open(io.BytesIO(image_content)).verify()
verify() 中的任何异常行会导致错误 'Upload a valid image...' .您可以通过将其分配给 image_content 来检查图像字节。 :
image_content = b'GIF87a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00ccc,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00'

也适合我。

此外,您可以在线生成图像字节:
import io    
from django.utils.image import Image
fp = io.BytesIO()
Image.new('P', (1,1)).save(fp, 'png')
fp.seek(0)
portrait = SimpleUploadedFile(name=''foo, content=fp.read())

关于Django 1.7 ImageField 表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com