Загрузка файла

Шаг 1: Вывод формы

Создание формы для загрузки файла:

# forms.py
from django import forms

class UploadFileForm(forms.Form):
    file = forms.FileField()

В контроллере его надо подключить и передать в шаблон:

# views.py
from from django.shortcuts import render
from .forms import UploadFileForm # подключение формы

def page(request):
    form = UploadFileForm()
    return render(request, "page.html", {"form": form})

Вывод в шаблоне:

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form }}
    <input type="submit">
</form>

В результате сгенерируется HTML-код формы.

Для загрузки файла надо указать атрибут enctype="multipart/form-data", т.к. без него файлы не будут загружаться на сайт.

Шаг 2: Загрузка файла

Файлы, загруженные через форму, доступны в параметре request.FILES.

# views.py
from from django.shortcuts import render
from .forms import UploadFileForm # подключение формы

def page(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        save_path = '/var/www/django_site/upload/' # папка для сохранения файлов
        if form.is_valid():
            # сохранение файла
            with open(save_path+request.FILES['file'].name, 'wb+') as destination:
                for chunk in request.FILES['file'].chunks():
                    destination.write(chunk)
    else:
        form = UploadFileForm()
    return render(request, "page.html", {'form': form})

Код выше будет загружать файлы в папку «/var/www/django_site/upload/».