Класс Storage

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

Синтаксис

pythonfrom 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)

Пример

Рассмотрим базовый пример сохранения файла с использованием стандартного хранилища:

pythonfrom 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)

Результат выполнения кода:

python"hello.txt"
"True"

Пример

Покажем, как открыть существующий файл и прочитать его содержимое:

pythonfrom 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)

Результат выполнения кода:

python"Hello, Django!"
"14"

Пример

Рассмотрим использование хранилища для удаления файла и получения списка файлов:

pythonfrom 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)

Результат выполнения кода:

python"(['file_0.txt', 'file_1.txt', 'file_2.txt'], [])"
"False"

Пример

Рассмотрим использование хранилища для получения URL файла и его пути в файловой системе:

pythonfrom 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)

Результат выполнения кода:

python"/media/example.txt"
"/path/to/media/example.txt"

Смотрите также

  • класс FileSystemStorage,
    реализация хранилища для локальной файловой системы
  • класс InMemoryStorage,
    реализация хранилища для хранения файлов в памяти
  • метод save,
    сохраняет файл в хранилище
  • метод open,
    открывает файл для чтения или записи