Объект 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, *args, **kwargs)[исходный код]¶ Открыть или переоткрыть файл (при этом также выполняется
File.seek(0)
). Аргументmode
допускает те же значения, что и встроенный в Pythonopen()
.*args
и**kwargs
передаются послеmode
встроенной в Python функцииopen()
.При повторном открытии файла
mode
отменяет любой режим, в котором файл был первоначально открыт;None
означает повторное открытие в исходном режиме.Его можно использовать как менеджер контекста, например
with file.open() as 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()
будет вызываться после удаления файла.