Ограничение и лимит размера загружаемого файла в Django

У меня есть форма в моем приложении, где пользователи могут загружать файлы, так как я могу установить ограничение на размер и тип загружаемого файла?

**models.py**
class Document(models.Model):
    emp = models.ForeignKey(Emp, null=True, on_delete=models.SET_NULL)
    Description = models.CharField(max_length=100, null=True)
    Fichier = models.FileField(upload_to='file/')
    data_created = models.DateTimeField(auto_now_add=True, null=True)

**forms.py**
class documentForm(ModelForm):
    class Meta:
        model = Document
        fields = '__all__'
        exclude = []

**view.py**
def createDocument(request):
    forms = documentForm()

    if request.method == 'POST':
        forms = documentForm(request.POST, request.FILES)
        if forms.is_valid():
            forms.save()
            return redirect('/')

    context = {'forms':forms}
    return render(request, 'accounts/document_form.html', context)
from django import forms
from django.template.defaultfilters import filesizeformat
from django.utils.translation import ugettext_lazy as _

# 2.5MB = 2.5 * 1024 * 1024 = 2621440
# 5MB = 5 * 1024 * 1024 = 5242880
# 10MB = 10 * 1024 * 1024 = 10485760
# n MB = n * 1024 * 1024 = ...

# I write this example for 5 MB size limit for you
MAX_UPLOAD_SIZE = "5242880"

class documentForm(forms.ModelForm):
    def clean(self):
        self.check_file()
        return self.cleaned_data

    def check_file(self):
        content = self.cleaned_data["Fichier"]
        content_type = content.content_type.split('/')[0]
        if content._size > int(MAX_UPLOAD_SIZE):
            raise forms.ValidationError(_(f"Please keep file size under {(filesizeformat(MAX_UPLOAD_SIZE)}. Current file size {filesizeformat(content._size)}"))
        return content
        
    class Meta:
        model = Document
        fields = '__all__'

Кроме того, вы можете использовать больше способов сделать это ограничение на разных уровнях вашего кода, для более подробной информации смотрите раздел References.

Ссылки:

Валидация по типу содержимого файла и размеру [djangosnippets]

Django Ограничение размера загружаемого файла [stackoverflow]

File Uploads [django-docs]

Загруженные файлы и обработчики загрузки [django-docs]

Вернуться на верх