Получение изображения из формы
Делаю сайт, который должен преобразовывать изображение при помощи стороннего скрипта, но не могу получить и сохранить изображение от пользователя
Код:
views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import DB_Form
from .models import DB_Image
#import pic_script
def index(request):
images = DB_Image.objects.all()
form = DB_Form()
return render(request, "index.html", context = {'form' : form})
def create(request):
if request.method == "POST":
img = DB_Image()
img.image = request.POST.get("img_form")
img.save()
return HttpResponseRedirect("/")
urls.py
from django.contrib import admin
from django.urls import path
from firstapp import views
urlpatterns = [
path('', views.index),
path('create/', views.create),
path('admin/', admin.site.urls),
]
forms.py
from django import forms
class DB_Form(forms.Form):
img_form = forms.ImageField(label = "")
models.py
from django.db import models
class DB_Image(models.Model):
image = models.ImageField(upload_to='images/')
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="POST" action="create/">
{% csrf_token %}
<p>{{ form }}</p>
<p><input type="submit" value="Обработать" ></p>
</form>
</body>
</html>
Ответы (2 шт):
если используешь form то тебе нужно самостоятельно сделать сохранение этого изображения на диск для постоянного хранения, а так же в модель.
Используй ModelForm она за тебя автоматически переместит сохраненное изображение в ту папку, которая указана по upload_to="images" и сохранит модель в БД
class DB_Form(forms.ModelForm):
Meta:
model = DB_Image
field = ("image",)
соответственно, после того, как ты сохранишь форму изображение у тебя будет находится в папке на диске и преобразовывай его как тебе нужно.
Ответ Андрея, безусловно, очень мне помог, но не решил проблему полностью, как оказалось, я допустил ошибку в файле index.html, прикладываю исправления:
<form method="POST" action = "create/" enctype="multipart/form-data">
А также пришлось подвергнуть существенным изменениям файл views.py:
def index(request):
images = DB_Image.objects.all()
form = DB_Form(request.POST, request.FILES)
return render(request, "index.html", context = {'form' : form})
def create(request):
if request.method == "POST":
img = DB_Image()
form = DB_Form(request.POST, request.FILES)
img.image = request.POST.get("img_form")
img.save()
form.save()
return HttpResponseRedirect("/")