РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
633 of 818 menu

Класс ContentFile

Класс ContentFile наследуется от File и предоставляет возможность работать с содержимым файла, которое хранится в памяти как строковый или байтовый объект. Этот класс особенно полезен при необходимости создать файл динамически и сохранить его через систему хранения Django, минуя физическую файловую систему. В качестве аргумента конструктор принимает содержимое файла в виде строки или байтов, а также опциональное имя файла.

Синтаксис

from django.core.files.base import ContentFile ContentFile(content, name=None)

Параметры конструктора:

  • ⁅b⁆content⁅/b⁆ - содержимое файла в виде строки или байтов;
  • ⁅b⁆name⁅/b⁆ - опциональное имя файла (по умолчанию None).

Пример

Давайте создадим файл из текстовой строки и сохраним его через стандартную систему хранения:

from django.core.files.base import ContentFile from django.core.files.storage import default_storage content = "Hello, World!" file = ContentFile(content.encode('utf-8'), name="hello.txt") saved_path = default_storage.save("files/" + file.name, file) print(saved_path)

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

"files/hello.txt"

Пример

Используем ContentFile для сохранения содержимого в поле модели FileField:

from django.db import models from django.core.files.base import ContentFile class Document(models.Model): title = models.CharField(max_length=100) file = models.FileField(upload_to='documents/') doc = Document.objects.get(id=1) content = "This is the content of the document." doc.file.save("document.txt", ContentFile(content.encode('utf-8'))) doc.save()

Пример

Создадим изображение в памяти с помощью библиотеки PIL и сохраним его через ContentFile:

from io import BytesIO from PIL import Image from django.core.files.base import ContentFile # Создаем изображение в памяти image = Image.new('RGB', (100, 100), color='red') image_io = BytesIO() image.save(image_io, format='PNG') # Создаем ContentFile из байтов изображения content_file = ContentFile(image_io.getvalue(), name="red_square.png")

Пример

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

from django.core.files.base import ContentFile from django.core.files.storage import default_storage # Открываем существующий файл with default_storage.open("files/original.txt", "rb") as f: content = f.read() # Создаем копию с новым именем new_file = ContentFile(content, name="copy_of_original.txt") saved_path = default_storage.save("files/" + new_file.name, new_file) print(saved_path)

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

"files/copy_of_original.txt"

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

  • класс File,
    базовый класс для работы с файлами
  • класс Storage,
    абстрактный класс системы хранения файлов
  • класс default_storage,
    объект для работы с хранилищем по умолчанию
  • метод save,
    сохранение файла в хранилище
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить