2022-05-02 03:02:07
Как загружать файлы и изображения в приложении DjangoПодготовка проектаДля начала создайте каталог, в котором будут находиться проект и виртуальная среда (она нужна, чтобы отделять проектные зависимости от операционной системы).
Теперь выполните команду cdна этот каталог и сформируйте виртуальную среду:
mkdir filesDjango
cd filesDjango
python3.8 -m venv env
Активируйте ее и туда же установите Django:
source env/bin/activate
pip install Django
Создайте новый проект Django и назовите его file uploads:
django-admin startproject fileuploads
В каталоге данного проекта создайте приложение с именем files. Приложения в Django используются для разделения различных компонентов и необходимы для масштабирования самих приложений. Они также являются перемещаемыми элементами и их можно перетащить в другой проект Django, не ломая код.
django-admin startapp files
Добавьте файлы приложения к списку установленного софта в файле settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'files',
]
Django сохраняет файлы локально с помощью параметров MEDIA_ROOTи MEDIA_URL.
Определим эти константы в файле settings.py.:
import os
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_ROOTбудет использоваться для управления сохраненными данными, а MEDIA_URL— как url данных, которые требуется предоставить.
Загрузка данных Самый простой вариант — загружать файлы с помощью FileFields. Начните с создания простой модели в файле models.py, которая будет содержать три поля: имя, электронную почту и файл для загрузки.
from django.db import models
# Создайте модели здесь.
class Resume(models.Model):
email = models.EmailField()
name = models.CharField(max_length= 255, blank=False, null=False)
file = models.FileField(upload_to= 'files/',null=True)
def __repr__(self):
return 'Resume(%s, %s)' % (self.name, self.file)
def __str__ (self):
return self.name
Параметр upload_toуказывает, куда будут перемещены файлы.
Запуск миграций Миграции создадут актуальные таблицы в базе данных.
python3.8 manage.py migrate
Формы Django имеет встроенный класс ModelForm, позволяющий легко создавать формы из модельных полей. Создайте новый файл forms.pyи добавьте код:
from django import forms
from .models import Resume
class ResumeForm(forms.ModelForm):
class Meta:
model = Resume
fields = ['email','name','file']
Определив форму, вы получите данные из нее с помощью request.FILES, используя запрос POSTв представлении. Чтобы получить данные, содержащиеся в форме, откройте файл view.pyи напишите следующий код:
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import ResumeForm
# Создайте здесь представления.
def upload_resume(request):
if request.method == 'POST':
form = ResumeForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect("/")
else:
form = ResumeForm
return render(request, 'files/resume.html', {'form':form})
В вышеизложенном коде проверьте, чтобы метод запроса был POST, затем получите данные из формы, проверьте их и сохраните в базе данных. Если метод запроса — GET, то отобразите форму в шаблоне.
Мы еще не создали шаблон upload.html(Django автоматически найдет его в соответствующем каталоге), с помощью которого будет отображена форма, так что давайте приступим. Создайте файлы, как показано ниже:
templates/
files/
-upload.html
Для отп[...]
99 views00:02