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
.
-
Класс Storage
¶
-
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
.Если файл с именем
name
уже существует, вызывается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)¶ Проверяет
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
.
-