Лучший способ проверки загружаемых пользователем файлов в django
Какой лучший способ проверки загружаемых пользователем файлов, как по размеру, так и по типу?
from django.core.exceptions import ValidationError
def validate_file_size(value):
filesize= value.size
if filesize > 10485760:
raise ValidationError("The maximum file size that can be uploaded is 10MB")
else:
return value
class File(models.Model):
name= models.CharField(max_length=500)
filepath= models.FileField(upload_to='files/', verbose_name="", validators=[validate_file_size])
def __str__(self):
return self.name + ": " + str(self.filepath)
Вы также можете проверить mimetype файла и его суффикс. Например:
from pathlib import Path
from django.conf import settings
def file_validator(value):
if value.size > settings.MAX_FILE_SIZE:
raise ValidationError("File is too big.")
if not Path(str(value)).suffix.strip().lower() in ["list of strings of valid suffix"]:
raise ValidationError("File does not look like as ....")
mime_type = mimetypes.guess_type(str(value))[0]
if mime_type not in ["list of strings of valid mime types"]: # image/png, image/jpeg and etc
raise ValidationError("Invalid mime type.")