Объект File¶
Модуль django.core.files и его подмодули содержат встроенные классы для базовой обработки файлов в Django.
Класс File¶
-
class
File(file_object, name=None)[исходный код]¶ Класс
Fileпредставляет собой тонкую оболочку вокруг объекта Python file с некоторыми специфичными для Django дополнениями. Внутри Django использует этот класс, когда ему нужно представить файл.Объекты
Fileимеют следующие атрибуты и методы:-
name¶ Имя файла, включая относительный путь от
MEDIA_ROOT.
-
size¶ Размер файла в байтах.
-
file¶ Базовый file object, который этот класс обертывает.
Будьте осторожны с этим атрибутом в подклассах.
Некоторые подклассы
File, включаяContentFileиFieldFile, могут заменять этот атрибут на объект, отличный от Python file object. В этих случаях этот атрибут может сам быть подклассомFile(и не обязательно тем же подклассом). По возможности используйте атрибуты и методы самого подкласса, а не атрибуты подклассаfile.
-
mode¶ Режим чтения/записи для файла.
-
open(mode=None)[исходный код]¶ Откройте или повторно откройте файл (который также выполняет
File.seek(0)). Аргументmodeдопускает те же значения, что и встроенный в Pythonopen().При повторном открытии файла
modeотменяет любой режим, в котором файл был первоначально открыт;Noneозначает повторное открытие в исходном режиме.Его можно использовать как менеджер контекста, например
with file.open() as 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)¶ Сохраняет новый файл с указанным именем и содержимым. Это не заменит существующий файл, но создаст новый файл и обновит объект, чтобы он указывал на него. Если
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()будет вызываться после удаления файла.