РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
428 of 818 menu

Поле FileField

Поле FileField в формах Django предназначено для приема файлов, отправленных пользователем через веб-форму. Оно представляет собой поле ввода с типом file в HTML и автоматически обрабатывает загруженные данные. Для работы с этим полем необходимо, чтобы форма имела атрибут enctype="multipart/form-data". Поле может принимать параметры валидации, такие как max_length для ограничения имени файла и allow_empty_file для разрешения или запрета пустых файлов.

Синтаксис

from django import forms class MyForm(forms.Form): file = forms.FileField(**options)

Пример

Давайте создадим форму для загрузки файла с валидацией расширения:

from django import forms from django.core.validators import FileExtensionValidator class UploadForm(forms.Form): document = forms.FileField( label="Choose a file", validators=[FileExtensionValidator(allowed_extensions=['pdf', 'docx'])] )

Результат выполнения кода:

"<input type="file" name="document" id="id_document">"

Пример

Давайте обработаем загруженный файл в представлении:

from django.shortcuts import render from .forms import UploadForm from django.core.files.storage import default_storage def upload_view(request): if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): uploaded_file = request.FILES['document'] file_path = default_storage.save(uploaded_file.name, uploaded_file) res = f"File saved to {file_path}" return render(request, 'success.html', {'message': res}) else: form = UploadForm() return render(request, 'upload.html', {'form': form})

Пример

Давайте используем FileField в модели и создадим форму на основе модели:

from django.db import models from django import forms class Document(models.Model): title = models.CharField(max_length=100) file = models.FileField(upload_to='documents/') class DocumentForm(forms.ModelForm): class Meta: model = Document fields = ['title', 'file']

Результат выполнения кода:

"<input type="file" name="file" id="id_file">"

Пример

Давайте проверим, загружен ли файл и получим его размер:

from django import forms class FileCheckForm(forms.Form): file = forms.FileField() def check_file(request): if request.method == 'POST': form = FileCheckForm(request.POST, request.FILES) if form.is_valid(): file_obj = request.FILES['file'] if file_obj: res = f"File size: {file_obj.size} bytes" return render(request, 'result.html', {'result': res}) else: form = FileCheckForm() return render(request, 'check.html', {'form': form})

Смотрите также

  • поле ImageField,
    которое специализируется на загрузке изображений
  • поле FilePathField,
    которое предоставляет выбор файлов из директории
  • виджет FileInput,
    который рендерит HTML-поле для загрузки файлов
  • виджет ClearableFileInput,
    который добавляет возможность очистить загруженный файл
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить