Как вызвать логику bussines из отдельного класса в представлении в Django?

Я использую фреймворк django. И у меня есть некоторая функциональность для загрузки файлов. И у меня есть textarea, где будет показано извлеченное содержимое загруженного файла

Например, если вы загружаете файл pdf, внутри которого находится изображение, содержащее текст. В текстовой области будет отображаться текст.

Но логика извлечения текста из изображения, конечно, не принадлежит методу в представлении.

Поэтому я сделал отдельный класс для этого, с именем: extractingTextFromFile.py

что выглядит следующим образом:

import io
from tracemalloc import start
from PIL import Image
import pytesseract
from wand.image import Image as wi
import re


class ExtractingTextFromFile:

    def extractingtextfromimage():      
        text_factuur_verdi = []

        #image = pdfFile.convert('jpeg')
        imageBlobs = []

        for img in image.sequence:
                imgPage = wi(image=img)
                imageBlobs.append(imgPage.make_blob('jpeg'))

        for imgBlob in imageBlobs:
            image = Image.open(io.BytesIO(imgBlob))
            text = pytesseract.image_to_string(image, lang='eng')
            text_factuur_verdi.append(text)

           

и у меня есть views.py:

from django.shortcuts import render
from django.views import View
from django.http import HttpResponseRedirect
from .forms import ProfileForm
from .models import UploadFile
import extractingTextFromFile as textFromFile
from wand.image import Image as wi
from PIL import Image
import pytesseract
from django.conf import settings
import io
import os


class ReadingFile(View):
    def get(self, request):
        form = ProfileForm()
        return render(request, "main/create_profile.html", {
            "form": form
        })

    def extractingtextfromimage():

        pass

    def post(self, request):
        submitted_form = ProfileForm(request.POST, request.FILES)
        content = ''

        if submitted_form.is_valid():
            uploadfile = UploadFile(image=request.FILES["upload_file"])

            name_of_file = str(request.FILES['upload_file'])
            uploadfile.save()
            print('path of the file is:::', uploadfile.image.name)
            #path_to_file = uploadfile.upload_file.path
            #request.session['text'] = name_of_file(filetosave.file.path)

            with open(os.path.join(settings.MEDIA_ROOT,
                                   f"{uploadfile.image}"), 'r') as f:

                print("Now its type is ", type(name_of_file))
                print(uploadfile.image.path)

                # reading PDF file
                if name_of_file.endswith('.pdf'):
                    textFromFile.extractingtextfromimage()

                    content = text_factuur_verdi
                    print(text_factuur_verdi)

                # ENDING Reading pdf file

                else:
                    content = f.read()
                    print(content)

            return render(request, "main/create_profile.html", {
                'form': ProfileForm(),
                "content": content
            })

        return render(request, "main/create_profile.html", {
            "form": submitted_form,
        })


так и в этой строке:

  textFromFile.extractingtextfromimage()

Я пытаюсь вызвать отдельный метод.

Но, конечно, не хватает некоторых свойств, например: text_factuur_verdi.

Итак, мой вопрос: как вызвать этот отдельный метод из представления?

Спасибо

Итак, это работает в файле views.py:

  # reading PDF file
                if name_of_file.endswith('.pdf'):
                    pdfFile = wi(filename= uploadfile.image.path , resolution=300)
                    text_factuur_verdi = []

                    image = pdfFile.convert('jpeg')
                    imageBlobs = []

                    for img in image.sequence:
                        imgPage = wi(image=img)
                        imageBlobs.append(imgPage.make_blob('jpeg'))

                    for imgBlob in imageBlobs:
                        image = Image.open(io.BytesIO(imgBlob))
                        text = pytesseract.image_to_string(image, lang='eng')
                        text_factuur_verdi.append(text)

                    content = text_factuur_verdi
                    print(text_factuur_verdi)
                    
                # ENDING Reading pdf file

Но, конечно, это должно быть в отдельном файле.

А затем из представления вы можете инжектировать метод.

Вернуться на верх