В Django есть два поля, позволяющих загружать картинки: FileField и ImageField . Второй вариант – специализированная версия FileField , использующая подтверждение от библиотеки Pillow , что файл является изображением.
Начнем с создания моделей. Создадим файл models.py и поместим в него следующее содержимое:
Переменная image – это поле ImageField , которое работает с API хранилища, который обеспечивает способ хранения/извлечения, а также чтения/записи файлов.
Параметр upload_to указывает путь, где будут храниться изображения. Для этой модели он будет соответствовать MEDIA_ROOT/images/
Также возможна установка динамических путей для изображений:
Это позволит хранить изображения в каталогах вида MEDIA_ROOT/users/2020/05/26 .
Установим Pillow , выполнив следующую команду:
Чтобы Django обслуживал медиафайлы, загруженные пользователями, добавим следующие настройки в файл settings.py вашего проекта:
MEDIA_URL – это URL-адрес, который будет обслуживать медиафайлы, а MEDIA_ROOT – это путь к корневому каталогу, в котором хранятся файлы.
Добавим следующий код в urls.py :
Теперь нам нужно создать форму для модели изображения. В файл forms.py добавим следующий код:
Это создаст форму с полями title и image , которые будут отображаться в шаблонах. А сейчас создадим шаблон для загрузки файлов. В index.html внесем следующее:
Включение свойства enctype для формы обеспечивает правильное прикрепление загруженного файла к запросу.
Напишем обработчик формы в views.py :
Django делает всю работу сам, а мы просто прогоняем форму через валидацию и сохраняем ее при успешной загрузке файла. Теперь, когда обработчик готов, сопоставим все с URL-адресом в urls.py :
Сохраним файлы, запустим сервер и проверим работу программы.
Мы рассмотрели простейший вариант безопасной загрузки картинки на сервер с помощью Django. Вариант прост в реализации и понятен не только для специалистов с опытом. Удачи в обучении.