python - 覆盖 Django ImageField 验证

标签 python django django-models django-forms

我正在尝试创建一个表单,允许用户上传任何图像文件+ SWF 文件。 Django 的 ImageField 不支持 SWF,因此我需要覆盖它。

我想做的是检查文件是否为SWF,如果为True,则返回它。如果不是 SWF,则调用原始方法来处理文件验证。

但是,我不确定如何实现。这是我想要实现的目标的示例,但它不起作用:

from hexagonit import swfheader    


class SwfImageField(forms.ImageField):

    def to_python(self, data):
        try:
            swfheader.parse(data)
            return data
        except:
            return super(SwfImageField, self).to_python(data)

实际上,目前允许 SWF 文件。

最佳答案

另一种可能最简单的解决方案是使用标准 FileField使用自定义验证器:

def my_validate(value):
    ext = os.path.splitext(value.name)[1]  # [0] returns path filename
    valid = ['.jpg', '.swf']
    if ext not in valid:
        raise ValidationError("Unsupported file extension.")

class MyForm(forms.Form):
    file = forms.FileField(validators=[my_validate])

关于python - 覆盖 Django ImageField 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642404/

相关文章:

django - contenttypes.contenttype 在此迁移中不可用

python - 在 Django 管理中重新排序应用程序和模型

python - 如何使用唯一约束更新 Django 中的对象列表?

python - Dockerfile 在文件夹中运行 scrapy scrapy 命令

python - celery 与 djcelery

python - 深度递归(Python)

python - 如何在python中使用uber h3将shapefile/geojson转换为六边形?

javascript - 跟踪在线状态?

python - 使用 mod_python 时 python 日志记录模块的不同行为

Django模型字段顺序