Класс Storage
Класс Storage является базовым абстрактным классом, определяющим
интерфейс для работы с файлами в Django. Он предоставляет методы для
сохранения, открытия, удаления, проверки существования и получения
информации о файлах. Основные реализации включают
FileSystemStorage для работы с локальной файловой системой
и InMemoryStorage для хранения файлов в памяти.
Класс широко используется для управления загруженными файлами
и медиа-контентом.
Синтаксис
from django.core.files.storage import default_storage
# Использование стандартного хранилища
result = default_storage.save(name, content)
# Использование конкретного хранилища
from django.core.files.storage import FileSystemStorage
storage = FileSystemStorage(location='/path/to/files')
result = storage.save(name, content)
Пример
Рассмотрим базовый пример сохранения файла с использованием стандартного хранилища:
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
# Создаем файл в памяти
content = ContentFile(b"Hello, Django!")
# Сохраняем файл
file_name = default_storage.save("hello.txt", content)
print(file_name)
# Проверяем существование файла
exists = default_storage.exists(file_name)
print(exists)
Результат выполнения кода:
"hello.txt"
"True"
Пример
Покажем, как открыть существующий файл и прочитать его содержимое:
from django.core.files.storage import default_storage
# Открываем файл для чтения
with default_storage.open("hello.txt", "rb") as file:
content = file.read()
print(content.decode("utf-8"))
# Получаем размер файла
size = default_storage.size("hello.txt")
print(size)
Результат выполнения кода:
"Hello, Django!"
"14"
Пример
Рассмотрим использование хранилища для удаления файла и получения списка файлов:
from django.core.files.storage import default_storage
# Сохраняем несколько файлов
for i in range(3):
content = ContentFile(f"Content {i}".encode())
default_storage.save(f"file_{i}.txt", content)
# Получаем список файлов
files = default_storage.listdir("")
print(files)
# Удаляем файл
default_storage.delete("file_0.txt")
exists = default_storage.exists("file_0.txt")
print(exists)
Результат выполнения кода:
"(['file_0.txt', 'file_1.txt', 'file_2.txt'], [])"
"False"
Пример
Рассмотрим использование хранилища для получения URL файла и его пути в файловой системе:
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
# Сохраняем файл
content = ContentFile(b"Example content")
file_name = default_storage.save("example.txt", content)
# Получаем URL файла
url = default_storage.url(file_name)
print(url)
# Получаем путь к файлу
path = default_storage.path(file_name)
print(path)
Результат выполнения кода:
"/media/example.txt"
"/path/to/media/example.txt"
Смотрите также
-
класс
FileSystemStorage,
реализация хранилища для локальной файловой системы -
класс
InMemoryStorage,
реализация хранилища для хранения файлов в памяти -
метод
save,
сохраняет файл в хранилище -
метод
open,
открывает файл для чтения или записи