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

Атрибут FILES

Атрибут FILES класса HttpRequest предоставляет доступ к файлам, загруженным пользователем через формы. Он содержит данные в виде словаря, где ключи - это имена полей из формы, а значения - объекты загруженных файлов. FILES доступен только для запросов с методом HttpRequest/attribute/POST/">POST и при условии, что форма имеет атрибут enctype="multipart/form-data". Данные из FILES автоматически обрабатываются Django и предоставляют удобный интерфейс для работы с загруженными файлами.

Синтаксис

request.FILES.get('field_name') request.FILES['field_name'] request.FILES.getlist('field_name')

Пример . Модель для работы с файлами

Для демонстрации работы с атрибутом FILES создадим модель, хранящую информацию о загруженных файлах:

from django.db import models class Document(models.Model): title = models.CharField(max_length=100) file = models.FileField(upload_to='documents/') uploaded_at = models.DateTimeField(auto_now_add=True) class Image(models.Model): name = models.CharField(max_length=100) image = models.ImageField(upload_to='images/') description = models.TextField(blank=True)

Обработка одиночного файла

Рассмотрим обработку формы с одним полем для загрузки файла:

from django.shortcuts import render, redirect from myapp.models import Document def upload_document(request): if request.method == 'POST': uploaded_file = request.FILES.get('document') if uploaded_file: document = Document.objects.create( title=request.POST.get('title', 'Untitled'), file=uploaded_file ) return redirect('document_detail', pk=document.pk) return render(request, 'upload.html')

Результат выполнения кода при успешной загрузке:

"Document uploaded successfully"

Обработка множественных файлов

Для полей, поддерживающих множественную загрузку, используйте метод getlist:

from django.shortcuts import render from myapp.models import Image def upload_images(request): if request.method == 'POST': uploaded_files = request.FILES.getlist('images') for uploaded_file in uploaded_files: Image.objects.create( name=uploaded_file.name, image=uploaded_file ) return render(request, 'success.html', { 'count': len(uploaded_files) }) return render(request, 'upload_images.html')

Проверка наличия файлов

Перед обращением к атрибуту FILES рекомендуется проверять наличие файлов:

from django.http import HttpResponseBadRequest def process_files(request): if request.method == 'POST': if request.FILES: for field_name, uploaded_file in request.FILES.items(): print(f"Field: {field_name}, File: {uploaded_file.name}") return render(request, 'files_list.html', { 'files': request.FILES.items() }) return HttpResponseBadRequest("No files uploaded") return render(request, 'upload_form.html')

Проверка размера и типа файла

Атрибут FILES позволяет проверять свойства загружаемых файлов:

from django.http import HttpResponse from django.shortcuts import render def validate_file(request): if request.method == 'POST': uploaded_file = request.FILES.get('document') if uploaded_file: file_size = uploaded_file.size file_type = uploaded_file.content_type file_name = uploaded_file.name if file_size > 1024 * 1024: return HttpResponse("File too large. Max 1MB") if not file_type.startswith('image/'): return HttpResponse("Only images allowed") # Process valid file return render(request, 'file_info.html', { 'name': file_name, 'size': file_size, 'type': file_type }) return HttpResponse("No file selected") return render(request, 'upload.html')

Сохранение файла вручную

При необходимости файл можно сохранить вручную, используя объект из FILES:

import os from django.conf import settings from django.shortcuts import render def custom_save(request): if request.method == 'POST': uploaded_file = request.FILES.get('file') if uploaded_file: file_path = os.path.join(settings.MEDIA_ROOT, uploaded_file.name) with open(file_path, 'wb+') as destination: for chunk in uploaded_file.chunks(): destination.write(chunk) return render(request, 'file_saved.html', { 'path': file_path }) return render(request, 'upload.html')

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

  • атрибут GET,
    который содержит параметры запроса из URL
  • атрибут POST,
    который содержит данные формы, отправленные методом POST
  • класс HttpRequest,
    который является основным объектом запроса в Django
  • класс FileResponse,
    который используется для отправки файлов в ответе
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить