gpt4 book ai didi

python - 允许通过 Django 管理将 SVG 文件上传到 ImageField

转载 作者:太空狗 更新时间:2023-10-29 22:10:44 24 4
gpt4 key购买 nike

我正在切换到 SVG 图像来表示我的电子商务平台上的类别。我之前在类别模型中使用 models.ImageField 来存储图像,但是 forms.ImageField 验证无法处理基于矢量的图像(因此拒绝它)。

我不需要对有害文件进行彻底验证,因为所有上传都将通过 Django 管理完成。看起来我必须在我的模型中切换到 models.FileField,但我确实想要警告不要上传无效图像。

Nick Khlestov 写了一个 SVGAndImageFormField (在文章中查找来源,我没有足够的声誉来发布更多链接)django-rest-framework's ImageField .我如何在 Django 的 ImageField(而不是 DRF 的)上使用这个解决方案?

最佳答案

我从未使用过 SVGAndImageFormField 所以我无法对此发表评论。就我个人而言,我会选择 FileField 的简单应用程序,但这显然取决于项目要求。我将在下面展开:

如评论中所述,ImageField 和 FileField 之间的基本区别在于,首先使用 Pillow 检查文件是否为图像:

Inherits all attributes and methods from FileField, but also validates that the uploaded object is a valid image.

引用:Django docs , Django source code

它还提供了一些可能与 SVG 情况无关的属性(高度、宽度)。

因此,模型字段可以是:

    svg = models.FileField(upload_to=..., validators=[validate_svg])

您可以使用相关问题中提供的类似 is_svg 的函数:

How can I say a file is SVG without using a magic number?

然后是验证 SVG 的函数:

def validate_svg(file, valid):
if not is_svg(file):
raise ValidationError("File not svg")

关于python - 允许通过 Django 管理将 SVG 文件上传到 ImageField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006200/

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