автоматически преобразовать файл docx / pdf в текстовый файл после сохранения новой модели в представлении на основе классов django - PullRequest
1 голос
/ 04 апреля 2019

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

Вот мой взгляд:

from django.shortcuts import render
from rest_framework import viewsets, permissions     
from rest_framework.parsers import FormParser, MultiPartParser              
from .serializers import candidateSerializer
from .models import Candidate
from .conversion import convertPDF, convertDOCX, handle_uploaded_file
#from django.db.models.signals import post_save
#from django.dispatch import receiver
from rest_framework.response import Response
from rest_framework.decorators import action
#from django.core.files import File



class candidateView(viewsets.ModelViewSet):
    permission_classes = [
        permissions.AllowAny,
    ]
    serializer_class = candidateSerializer
    queryset = Candidate.objects.all()
    cv = list(queryset.values('CV'))
    cvName = [el['CV'] for el in cv]
    file = cvName[len(cvName)-1]
    handle_uploaded_file(file)

вот функция handle_uploaded_file для преобразования загруженных файлов:

def handle_uploaded_file(file):
    Dir = 'C:/workspace/backend/media/'
    textDir = 'C:/workspace/backend/media/textResumes/'

    if file.endswith(".pdf"):
        name = file.split(".")[0]
        textfilename = name + '.txt'
        filename = Dir + file
        doc= convertPDF(filename)
        f = open(textDir + textfilename, 'w+', encoding="utf-8")
        for line in doc:
            f.write(line)
        f.close()


    if file.endswith(".DOCX"):
        name = file.split(".")[0]
        textfilename = name + '.txt'
        filename = Dir +file
        doc = docx2txt.process(filename)
        f = open(textDir + textfilename, 'w+', encoding="utf-8")
        for line in doc:
            f.write(line)
        f.close()

    if file.endswith(".docx"):
        name = file.split(".")[0]
        textfilename = name + '.txt'
        filename = Dir +file
        doc = convertDOCX(filename)
        f = open(textDir + textfilename, 'w+', encoding="utf-8")
        for line in doc:
            f.write(line)
        f.close()

def convertPDF(fname):
    with open(fname, 'rb') as f:
        pdfReader = PyPDF2.PdfFileReader(fname)
        content = []
        for i in range(pdfReader.numPages):
            pageObj = pdfReader.getPage(i)
            content.append(pageObj.extractText())
        doc = ''
        for line in content:
            doc = doc + line
    return doc

def convertDOCX(fname):
    doc = docx.Document(fname)
    fullText = []
    for para in doc.paragraphs:
        fullText.append(para.text)
    doc = ''
    for line in fullText:
        doc = doc+ line
    return doc

1 Ответ

0 голосов
/ 04 апреля 2019

Подобный вопрос был задан. Я не уверен, почему вы создаете класс модели в файле представлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...