Django - Загрузка файлов на ваш сайт.

    Blazer |   27.09.2017 |   11:43:25 |   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">

Все.
Если что-то не понятно объяснил, то вы можете оставить ваш вопрос в комментариях к статье я с удовольствием отвечу.

Моя форма заказа выглядит так:

Ваши комментарии

Комментарии могут оставлять только зарегистрированые пользователи!

Disqus - комментарии

blog comments powered by Disqus