• 3.1
  • 3.2
  • 6.1
  • Версия документации: 5.0

Объект Файл

Модуль django.core.files и его подмодули содержат встроенные классы для базовой обработки файлов в Django.

Класс Файл

class File(file_object, name=None)

Класс File представляет собой тонкую оболочку вокруг объекта file Python с некоторыми дополнениями, специфичными для Django. Внутри Django использует этот класс, когда ему необходимо представить файл.

Объекты File имеют следующие атрибуты и методы:

name

Имя файла, включая относительный путь от MEDIA_ROOT.

size

Размер файла в байтах.

file

Базовый файловый объект, который обертывает этот класс.

Будьте осторожны с этим атрибутом в подклассах.

Некоторые подклассы File, включая ContentFile и FieldFile, могут заменить этот атрибут объектом, отличным от file object Python. В этих случаях этот атрибут сам может быть подклассом File (и не обязательно тем же подклассом). По возможности используйте атрибуты и методы самого подкласса, а не атрибута file подкласса.

mode

Режим чтения/записи файла.

open(mode=None, *args, **kwargs)

Откройте или повторно откройте файл (который также выполняет File.seek(0)). Аргумент mode допускает те же значения, что и встроенная в Python функция python:open(). *args и **kwargs передаются после mode во встроенную функцию Python python:open().

При повторном открытии файла режим будет иметь приоритет над тем режимом, в котором файл был первоначально открыт; None означает повторное открытие в исходном режиме.

Его можно использовать в качестве менеджера контекста, например. с file.open() как f:.

Changed in Django 5.0:

Добавлена ​​поддержка передачи *args и **kwargs.

__iter__()

Перебирайте файл, получая по одной строке за раз.

chunks(chunk_size=None)

Перебирать файл, получая «куски» заданного размера. chunk_size по умолчанию равен 64 КБ.

Это особенно полезно для очень больших файлов, поскольку позволяет передавать их с диска и не хранить весь файл в памяти.

multiple_chunks(chunk_size=None)

Возвращает True, если файл достаточно велик и для доступа ко всему его содержимому требуется несколько фрагментов, задайте некоторый chunk_size.

close()

Закройте файл.

В дополнение к перечисленным методам, File предоставляет следующие атрибуты и методы своего объекта file: encoding, fileno, flush, isatty, newlines, read, readinto, readline, readlines, seek, tell, truncate, write, writelines, readable(), writable() и seekable().

Класс ContentFile

class ContentFile(content, name=None)

Класс ContentFile наследует от File, но в отличие от File он работает со строковым содержимым (также поддерживаются байты), а не с реальным файлом. Например:

from django.core.files.base import ContentFile

f1 = ContentFile("esta frase está en español")
f2 = ContentFile(b"these are bytes")

Класс ImageFile

class ImageFile(file_object, name=None)

Django предоставляет встроенный класс специально для изображений. django.core.files.images.ImageFile наследует все атрибуты и методы File и дополнительно предоставляет следующее:

width

Ширина изображения в пикселях.

height

Высота изображения в пикселях.

Дополнительные методы для файлов, прикрепленных к объектам

Любой File, связанный с объектом (как в случае с Car.photo ниже), также будет иметь пару дополнительных методов:

File.save(name, content, save=True)

Сохраняет новый файл с указанным именем и содержимым. Это не заменит существующий файл, а создаст новый файл и обновит объект, чтобы он указывал на него. Если save имеет значение True, метод модели save() будет вызван после сохранения файла. То есть эти две строки:

>>> car.photo.save("myphoto.jpg", content, save=False)
>>> car.save()

эквивалентны:

>>> car.photo.save("myphoto.jpg", content, save=True)

Обратите внимание, что аргумент content должен быть экземпляром либо File, либо подкласса File, например ContentFile.

File.delete(save=True)

Удаляет файл из экземпляра модели и удаляет базовый файл. Если save имеет значение True, метод модели save() будет вызван после удаления файла.

Back to Top