在Django中验证上传文件类型

hak*_*uro 3 python django

我有一个带有文件字段的Post模型,用于上传文件.如何验证文件类型(目前为pdf,如果我稍后更改,则为任何其他类型).我最好还是要验证内容,但如果没有,我猜后缀也会这样做.我试图在网上查找,但我找到的大多数解决方案都是从后面回来的,随着Django文档的更新,它们不再起作用了.请有人帮忙.谢谢.

class Post(models.Model):
    author = models.ForeignKey('auth.User',default='')
    title = models.CharField(max_length=200)
    text = models.TextField()
    PDF = models.FileField(null=True, blank=True)
    created_date = models.DateTimeField(
            default=timezone.now)
    published_date = models.DateTimeField(
            blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

kic*_*hik 7

使用Django 1.11,您可以使用FileExtensionValidator.对于早期版本或额外验证,您可以基于它构建自己的验证器.你可能应该创建一个验证器,因为这个警告:

不要依赖文件扩展名的验证来确定文件的类型.无论文件包含哪些数据,都可以重命名文件以获得任何扩展名.

这是一个包含现有验证器的示例代码:

from django.core.validators import FileExtensionValidator
class Post(models.Model):
    PDF = models.FileField(null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
Run Code Online (Sandbox Code Playgroud)

源代码也可用,因此您可以轻松创建自己的:

https://docs.djangoproject.com/en/1.11/_modules/django/core/validators/#FileExtensionValidator