Django — Загрузка файлов с сайта на свой сервер с ограничением по размеру и типу файла.
Думаю многи люди задовались вопросом, как загружать файлы на свой сервер в django? У меня недавно тоже встал этот вопрос ребром и я удачно решил его с чем сейчас и поделюсь с вами.
В приложении своего проекта создайте файл validators.py и добавьте в него код, который можно найти на просторах интернета.
В medels.py подгружаем его.
И в своей модели вызываем его
Хочу заметить, что данный вариант предоставляет возможность загружать только определенный тип файлов, который вы можете разрешить путем добавления типа файла в функции validate_file_extension
Что бы сделать и ограничение по размеру загружаемого файла, вам нужно посмотреть здесь.
Далее к примеру у вас на сайте есть форма обратной связи и вы хотите, чтоб пользователи могли отправлять вам файлы. Для этого открываем views.py вашего приложения где находится функция формы обратной связи и добавляем в нее этот параметр.

Если у вас форма создана из модели, то не забудте как в моем случае добавить поле files в forms.py и теперь в функции нам нужно добавить это поле для проверки
После проверки это поле files мы должны вывести в контекст

Чтоб функция отправляла сам файл нужно перед отправкой указать это. В моем случае это выглядит так.
И в шаблоне в вашу фрму нужно обязательно добавить созданое поле files перед кнопкой отправить и в тег добавить этот код
Все.
Если что-то не понятно объяснил, то вы можете оставить ваш вопрос в комментариях к статье я с удовольствием отвечу.
Как правило, для веб-приложения полезно загружать файлы (изображение профиля, песни, PDF, слова …). Давайте обсудим, как загружать файлы в этой главе.
Загрузка изображения
Перед началом игры с изображением убедитесь, что у вас установлена библиотека изображений Python (PIL). Теперь, чтобы проиллюстрировать загрузку изображения, давайте создадим форму профиля в нашем myapp / forms.py –
Как видите, основное отличие здесь – это только формы . ImageField . ImageField убедится, что загруженный файл является изображением. Если нет, проверка формы не удастся.
Теперь давайте создадим модель «Профиль», чтобы сохранить загруженный профиль. Это делается в myapp / models.py –
Как вы можете видеть для модели, ImageField принимает обязательный аргумент: upload_to . Это место на жестком диске, где будут сохранены ваши изображения. Обратите внимание, что параметр будет добавлен в параметр MEDIA_ROOT, определенный в вашем файле settings.py.
Теперь, когда у нас есть Форма и Модель, давайте создадим представление в myapp / views.py –
Не пропустите часть, есть изменение при создании ProfileForm, мы добавили второй параметр: request.FILES . Если не пройти, проверка формы не удастся, давая сообщение, что изображение пустое.
Теперь нам просто нужен шаблон save.html и шаблон profile.html для формы и страницы перенаправления –
myapp / templates / save.html –
myapp / templates / profile.html –
Далее нам нужна пара URL-адресов, чтобы начать работу: myapp / urls.py
При доступе к «/ myapp / profile» мы получим следующий шаблон profile.html:

И на пост формы, сохраненный шаблон будет отображаться –

У нас есть пример для изображения, но если вы хотите загрузить другой тип файла, а не просто изображение, просто замените ImageField в Model и Form на FileField .
пример
Прежде всего, нам нужно добавить MEDIA_ROOT и MEDIA_URL в наш файл settings.py
Также здесь вы будете работать с ImageField , так что помните в таких случаях, установите Pillow library ( pip install pillow ). В противном случае у вас будет такая ошибка:
Подушка — это вилка PIL, Python Imaging Library, которая больше не поддерживается. Подушка обратно совместима с PIL.
Django поставляется с двумя полями формы для загрузки файлов на сервер, FileField и ImageField , следующий пример использования этих двух полей в нашей форме