Безопасная загрузка изображений в веб-приложении на Django

Безопасная загрузка изображений в веб-приложении на Django

В 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. Вариант прост в реализации и понятен не только для специалистов с опытом. Удачи в обучении.