Передача данных изображения одного представления, полученных методом POST, другому представлению без использования баз данных

Я работаю над проектом Django. Он содержит два представления.

Первым является HomePageView. Он содержит форму, которая принимает изображение от пользователя (аноним). При отправке формы пользователь перенаправляется во второе представление, ResultView.

forms.py

from django import forms
from .models import *

class ImageForm(forms.Form):
    image = forms.ImageField(label = 'Choose an image below.')

views.py

from django.views.generic import TemplateView
from django.http import HttpResponseRedirect
from django.shortcuts import render, redirect
from .models import *
from .forms import *
import base64




def HomePageView(request):
    if request.method == 'POST':
        form = ImageForm(request.POST , request.FILES)
        if form.is_valid():
            image_object = request.FILES['image']

             #or should i use : image_object = form.cleaned_data['image']
             #or should i use : image_object = request.POST.get('image')

            request.session['image_object'] = image_object
            return redirect(to='ResultView')
    else:
        form = ImageForm()

    params = {'form': form}
    return render(request, 'home.html', params)

home.html

<form action="" method="post" enctype="multipart/form-data">{% csrf_token%}
  
       <!--- Styling --->

      <div class="col-md-8  mt-4 pt-5">

        <div class="container mt-5 ">
          <div class="row p-3 ">
            <div class="col-md-12  align-items-center">
              {{ form.as_p }}
            </div>
          </div>
          <div class="row">
            <div class="col-md-4 ms-3"><button type="submit" class="btn btn-outline-dark font-monospace" data-mdb-ripple-color="dark">SUMBIT</button></div>
            <div class="col-md-4"></div>
            <div class="col-md-4"></div>
          </div>
        </div>

      </div>
    </div>
  </div>



</form>

Теперь я хочу получить изображение, которое загрузил пользователь. Передать его в представление результата, выполнить некоторую обработку ML, а затем отобразить его на шаблоне ResultView, не используя никакой базы данных. Однако на данный момент я написал код, который просто выполняет достаточную обработку, чтобы изображение можно было отобразить на веб-странице без использования базы данных.

views.py

Я ссылался на эту тему для этой части: Отображение загруженного/выбранного изображения без сохранения его в базе данных в Django

def ResultView(request):
    image_object = request.session.get('image_object')
    b64_img = base64.b64encode(image_object.file.read())
    context = {'img':b64_img}
    return render(request, 'result.html',context)

result.html

{% extends 'base.html' %}
{% block title %} RESULT {% endblock %}

<img src="data:image/png;base64,{{img}}">

{% block body %} 
{% endblock %}

Теперь, когда я запускаю приложение и ввожу изображение, оно выдает следующую ошибку:

**

Object of type InMemoryUploadedFile is not JSON serializable

**.

Как я могу устранить эти ошибки.

Попробуйте с этим фрагментом кода

def HomePageView(request):
    if request.method == 'POST':
        form = ImageForm(request.POST , request.FILES)
        if form.is_valid():
            image_object = request.FILES['image']
            #or should i use : image_object = form.cleaned_data['image']
            #or should i use : image_object = request.POST.get('image')
            request.session['image_object'] = str(request.build_absolute_uri(image_object))
            return redirect(to='ResultView')
    else:
        form = ImageForm()

    params = {'form': form}
    return render(request, 'home.html', params)


def ResultView(request):
    image_object = request.session.get('image_object')
    context = {'img':image_object}
    return render(request, 'result.html',context)
Вернуться на верх