Django - Загрузка файлов на ваш сайт.
Django - Загрузка файлов с сайта на свой сервер с ограничением по размеру и типу файла.
Думаю многи люди задовались вопросом, как загружать файлы на свой сервер в django? У меня недавно тоже встал этот вопрос ребром и я удачно решил его с чем сейчас и поделюсь с вами.
В приложении своего проекта создайте файл validators.py и добавьте в него код, который можно найти на просторах интернета.
def validate_file_extension(value):
import os
from django.core.exceptions import ValidationError
ext = os.path.splitext(value.name)[1] # [0] returns path+filename
valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls']
if not ext.lower() in valid_extensions:
raise ValidationError(u'Unsupported file extension.')
В medels.py подгружаем его.
from .validators import validate_file_extension
И в своей модели вызываем его
class Document(models.Model):
file = models.FileField(upload_to="documents/%Y/%m/%d", validators=[validate_file_extension])
Хочу заметить, что данный вариант предоставляет возможность загружать только определенный тип файлов, который вы можете разрешить путем добавления типа файла в функции validate_file_extension
Что бы сделать и ограничение по размеру загружаемого файла, вам нужно посмотреть здесь.
https://stackoverflow.com/questions/3648421/only-accept-a-certain-file-type-in-filefield-server-side
Далее к примеру у вас на сайте есть форма обратной связи и вы хотите, чтоб пользователи могли отправлять вам файлы. Для этого открываем views.py вашего приложения где находится функция формы обратной связи и добавляем в нее этот параметр.
Если у вас форма создана из модели, то не забудте как в моем случае добавить поле files в forms.py и теперь в функции нам нужно добавить это поле для проверки
files = form.cleaned_data['files']
После проверки это поле files мы должны вывести в контекст
Чтоб функция отправляла сам файл нужно перед отправкой указать это. В моем случае это выглядит так.
email.attach_file(base.files.path)
И в шаблоне в вашу фрму нужно обязательно добавить созданое поле files перед кнопкой отправить и в тег <form> добавить этот код
<form method="post" enctype="multipart/form-data">
Все.
Если что-то не понятно объяснил, то вы можете оставить ваш вопрос в комментариях к статье я с удовольствием отвечу.
Моя форма заказа выглядит так:
Ваши комментарии
Добрый день, подскажите как сделать подобную форму как у вас?
Написал: Jacs - 14 января 2019 г. 14:12
Комментарии могут оставлять только зарегистрированые пользователи!