MEDIA_ROOT и загрузка файлов
Принимайте и храните файлы, загруженные пользователями
«MEDIA_ROOT и загрузка файлов» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Статические файлы и медиафайлы
Статические файлы поставляются вместе с кодом. Медиафайлы загружаются пользователями во время работы приложения — например, аватары или документы — и требуют отдельного места хранения.
Настройка MEDIA_ROOT
MEDIA_ROOT — это абсолютная папка на диске, куда Django сохраняет все загруженные файлы. Она находится за пределами дерева исходного кода.
MEDIA_ROOT = BASE_DIR / 'media'Настройка MEDIA_URL
MEDIA_URL — это общедоступный префикс, по которому браузеры запрашивают загруженный файл, подобно тому как STATIC_URL используется для статических ресурсов.
MEDIA_URL = '/media/'Добавление FileField
Чтобы принимать загрузки, добавьте модели поле FileField. Django сохранит файл на диске, а в базе данных оставит только его путь.
class Resume(models.Model):
doc = models.FileField(upload_to='resumes/')Путь upload_to
Аргумент upload_to задаёт вложенную папку внутри MEDIA_ROOT. Используйте его для упорядочивания загрузок, например чтобы хранить все резюме вместе.
Динамический upload_to
Передайте в upload_to функцию, если путь должен зависеть от экземпляра, например чтобы распределять файлы по пользователям.
def user_dir(instance, filename):
return f'user_{instance.user.id}/{filename}'Формам нужен enctype
HTML-форма, загружающая файлы, должна установить для enctype значение multipart/form-data, иначе браузер вообще не отправит содержимое файлов.
<form method="post" enctype="multipart/form-data">Чтение request.FILES
Содержимое загруженных файлов не попадает в request.POST. Оно оказывается в request.FILES, который нужно передать форме для привязки файлов.
form = ResumeForm(request.POST, request.FILES)Получение URL
После сохранения каждое поле файла предоставляет свойство .url, создающее ссылку MEDIA_URL, которую можно вставить в шаблон.
<a href="{{ resume.doc.url }}">Download</a>Проверка загрузок
Никогда не доверяйте необработанным загрузкам. Ограничивайте размер и тип файла в методе clean формы, чтобы не пропускать вредоносные файлы. 🔒
Храните медиафайлы отдельно
MEDIA_ROOT должен находиться за пределами репозитория и никогда не обслуживаться collectstatic. Пользовательские файлы и код должны оставаться явно разделёнными.
Быстрая проверка
Проверим, куда поступают данные загруженного файла в представлении.
Итоги
Вы узнали, что MEDIA_ROOT хранит пользовательские загрузки, что FileField вместе с upload_to помогает их организовать, а request.FILES содержит содержимое файлов. 📁
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «MEDIA_ROOT и загрузка файлов» бесплатный?
Да — полный текст урока «MEDIA_ROOT и загрузка файлов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «MEDIA_ROOT и загрузка файлов»?
Принимайте и храните файлы, загруженные пользователями Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «MEDIA_ROOT и загрузка файлов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- STATICFILES и статический тег
- collectstatic для рабочего окружения
- MEDIA_ROOT и загрузка файлов
- ImageField и выдача загруженных файлов