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

Объект Файл

Модуль 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)

Open or reopen the file (which also does File.seek(0)). The mode argument allows the same values as Python’s built-in python:open().

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

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

__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)

Saves a new file with the file name and contents provided. This will not replace the existing file, but will create a new file and update the object to point to it. If save is True, the model’s save() method will be called once the file is saved. That is, these two lines:

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

are equivalent to:

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

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

File.delete(save=True)

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

Back to Top