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

API хранилища файлов

Получение класса хранилища по умолчанию

Django предоставляет удобные способы доступа к классу хранилища по умолчанию:

storages

Объект, похожий на словарь, который позволяет получить экземпляр хранилища, используя его псевдоним, определенный в STORAGES.

storages имеет атрибут backends, который по умолчанию имеет необработанное значение, указанное в STORAGES.

Кроме того, storages предоставляет метод create_storage(), который принимает словарь, используемый в STORAGES для бэкэнда, и возвращает экземпляр хранилища на основе этого определения бэкенда. Это может быть полезно для сторонних пакетов, которым необходимо создавать экземпляры хранилищ в тестах:

>>> from django.core.files.storage import storages
>>> storages.backends
{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
 'custom': {'BACKEND': 'package.storage.CustomStorage'}}
>>> storage_instance = storages.create_storage({"BACKEND": "package.storage.CustomStorage"})
class DefaultStorage

DefaultStorage обеспечивает отложенный доступ к системе хранения по умолчанию, как определено ключом default в STORAGES. DefaultStorage использует storages внутри.

default_storage

default_storage является экземпляром DefaultStorage.

Класс FileSystemStorage.

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None, allow_overwrite=False)

Класс FileSystemStorage реализует базовое хранилище файлов в локальной файловой системе. Он наследуется от Storage и предоставляет реализации для всех его общедоступных методов.

Примечание

Метод FileSystemStorage.delete() не вызовет исключение, если данное имя файла не существует.

location

Абсолютный путь к каталогу, в котором будут храниться файлы. По умолчанию используется значение вашей настройки MEDIA_ROOT.

base_url

URL-адрес, который обслуживает файлы, хранящиеся в этом месте. По умолчанию используется значение вашей настройки MEDIA_URL.

file_permissions_mode

Разрешения файловой системы, которые файл получит при сохранении. По умолчанию: настройка: FILE_UPLOAD_PERMISSIONS.

directory_permissions_mode

Разрешения файловой системы, которые каталог получит при сохранении. По умолчанию: настройка: FILE_UPLOAD_DIRECTORY_PERMISSIONS.

allow_overwrite
New in Django 5.1.

Флаг для управления возможностью сохранения нового файла поверх существующего. По умолчанию установлено значение «False».

get_created_time(name)

Возвращает datetime системного времени ctime, т.е. os.path.getctime(). В некоторых системах (например, Unix) это время последнего изменения метаданных, а в других (например, Windows) — время создания файла.

Класс InMemoryStorage.

class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)

Класс InMemoryStorage реализует хранилище файлов в памяти. Он не имеет постоянства, но может быть полезен для ускорения тестов за счет исключения доступа к диску.

location

Абсолютный путь к имени каталога, присвоенному файлам. По умолчанию используется значение вашей настройки MEDIA_ROOT.

base_url

URL-адрес, который обслуживает файлы, хранящиеся в этом месте. По умолчанию используется значение вашей настройки MEDIA_URL.

file_permissions_mode

Разрешения файловой системы, назначенные файлам, предусмотрены для совместимости с FileSystemStorage. По умолчанию: настройка: FILE_UPLOAD_PERMISSIONS.

directory_permissions_mode

Разрешения файловой системы, назначенные каталогам, предусмотрены для совместимости с FileSystemStorage. По умолчанию: настройка: FILE_UPLOAD_DIRECTORY_PERMISSIONS.

Класс Хранилище

class Storage

Класс Storage предоставляет стандартизированный API для хранения файлов, а также набор поведений по умолчанию, которые все другие системы хранения могут наследовать или переопределять при необходимости.

Примечание

Когда методы возвращают простые объекты datetime, эффективным часовым поясом будет текущее значение os.environ[„TZ“]``; обратите внимание, что это обычно устанавливается в TIME_ZONE Django.

delete(name)

Удаляет файл, на который ссылается name. Если удаление не поддерживается в целевой системе хранения, вместо этого будет выдано сообщение NotImplementedError.

exists(name)

Возвращает True, если файл, на который ссылается данное имя, уже существует в системе хранения.

get_accessed_time(name)

Возвращает datetime времени последнего доступа к файлу. Для систем хранения, которые не могут вернуть время последнего доступа, это вызовет NotImplementedError.

Если USE_TZ имеет значение True, возвращается известное datetime, в противном случае возвращается простое datetime в местном часовом поясе.

get_alternative_name(file_root, file_ext)

Возвращает альтернативное имя файла на основе параметров file_root и file_ext, к имени файла перед расширением добавляется подчеркивание плюс случайная 7-значная буквенно-цифровая строка.

get_available_name(name, max_length=None)

Возвращает имя файла на основе параметра name, которое является свободным и доступным для записи нового контента в целевую систему хранения.

Длина имени файла не будет превышать max_length, если она указана. Если свободное уникальное имя файла не может быть найдено, будет создано исключение SuspiciousFileOperation.

Если файл с именем уже существует, вызывается :meth:get_alternative_name для получения альтернативного имени.

get_created_time(name)

Возвращает datetime времени создания файла. Для систем хранения, которые не могут вернуть время создания, возникнет ошибка NotImplementedError.

Если USE_TZ имеет значение True, возвращается известное datetime, в противном случае возвращается простое datetime в местном часовом поясе.

get_modified_time(name)

Возвращает datetime времени последнего изменения файла. Для систем хранения, которые не могут вернуть время последнего изменения, возникнет ошибка NotImplementedError.

Если USE_TZ имеет значение True, возвращается известное datetime, в противном случае возвращается простое datetime в местном часовом поясе.

get_valid_name(name)

Возвращает имя файла на основе параметра name, подходящее для использования в целевой системе хранения.

generate_filename(filename)

Проверяет имя_файла, вызывая get_valid_name() и возвращает имя файла, которое будет передано в метод save().

Аргумент filename может включать путь, возвращаемый FileField.upload_to. В этом случае путь не будет передан в get_valid_name(), а будет добавлен обратно к полученному имени.

Реализация по умолчанию использует операции os.path. Переопределите этот метод, если он не подходит для вашего хранилища.

listdir(path)

Перечисляет содержимое указанного пути, возвращая кортеж из двух списков; первый элемент — это каталоги, второй — файлы. Для систем хранения, которые не могут предоставить такой список, вместо этого будет выдана ошибка NotImplementedError.

open(name, mode='rb')

Открывает файл, заданный name. Обратите внимание: хотя возвращаемый файл гарантированно является объектом File, на самом деле он может быть каким-то подклассом. В случае удаленного хранилища файлов это означает, что чтение/запись может быть довольно медленным, поэтому будьте осторожны.

path(name)

Путь к локальной файловой системе, по которому файл можно открыть с помощью стандартной функции Python open(). Для систем хранения, которые недоступны из локальной файловой системы, вместо этого будет выдаваться NotImplementedError.

save(name, content, max_length=None)

Сохраняет новый файл с использованием системы хранения, желательно с указанным именем. Если файл с таким именем name уже существует, система хранения может изменить имя файла по мере необходимости, чтобы получить уникальное имя. Будет возвращено фактическое имя сохраненного файла.

Аргумент max_length передается в get_available_name().

Аргумент content должен быть экземпляром django.core.files.File или файловоподобным объектом, который можно обернуть в File.

size(name)

Возвращает общий размер в байтах файла, на который ссылается name. Для систем хранения, которые не могут вернуть размер файла, вместо этого будет выдан NotImplementedError.

url(name)

Возвращает URL-адрес, по которому можно получить доступ к содержимому файла, на который ссылается name. Для систем хранения, которые не поддерживают доступ по URL-адресу, вместо этого будет выдаваться NotImplementedError.

Back to Top