Файловые объекты
Модуль 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 допускает те же значения, что и встроенный в Python open().
При повторном открытии файла 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() будет вызываться после удаления файла.