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_ZONEDjango.- 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.