首页 文章

覆盖Django ImageField验证

提问于
浏览
0

我正在尝试创建一个表单,允许用户上传任何图像文件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)

实际上目前只允许 only SWF文件 .

1 回答

  • 1

    另一种可能最简单的解决方案是使用带有自定义验证器的标准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])
    

相关问题