首页 > 解决方案 > 在前端添加一个图像字段和音频字段。使用 Django 后端和 reactjs 前端

问题描述

我需要在前端添加一个图像字段和音频字段。音频文件应该从前端的用户那里接受。然后,ml 文件应该被接受处理的文件,并且从它返回的文本和图像应该显示在前端。我该如何进行?

模型.py


from django.db import models
from django.conf import settings

class Question(models.Model):
 document = models.FileField(upload_to='documents/',default= "../../audio.wav")
 document = models.FileField('uploads/%Y/%m/% d/')
 created_at = models.DateTimeField(auto_now_add=True)
 updated_at = models.DateTimeField(auto_now=True)

 author = models.ForeignKey(settings.AUTH_USER_MODEL,
 on_delete=models.CASCADE,
 related_name="questions")

 def __str__(self):
 return self.document

class Answer(models.Model):
 transcript = models.TextField(max_length=255, blank=True)
 created_at = models.DateTimeField(auto_now_add=True)
 updated_at = models.DateTimeField(auto_now=True)
 question = models.ForeignKey(Question,
 on_delete=models.CASCADE,
 related_name="answers")
 author = models.ForeignKey(settings.AUTH_USER_MODEL,
 on_delete=models.CASCADE)
 voters = models.ManyToManyField(settings.AUTH_USER_MODEL,
 related_name="votes")

 def __str__(self):
 return self.transcript

视图.py

from rest_framework import generics, status, viewsets
from rest_framework.exceptions import ValidationError
from rest_framework.generics import get_object_or_404
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
import speech_recognition as sr
import webbrowser as wb
from pydub import AudioSegment
from questions.api.permissions import IsAuthorOrReadOnly
from questions.api.serializers import AnswerSerializer, QuestionSerializer
from questions.models import Answer, Question

r1=sr.Recognizer()


class AnswerCreateAPIView(generics.CreateAPIView):
 """Allow users to answer a question instance if they haven't already."""
 queryset = Answer.objects.all()
 serializer_class = AnswerSerializer
 permission_classes = [IsAuthenticated]

 def perform_create(self, serializer):
 request_user = self.request.user
 kwarg_slug = self.kwargs.get("slug")
 question = get_object_or_404(Question, slug=kwarg_slug)

 if question.answers.filter(author=request_user).exists():
 raise ValidationError("You have already answered this Question!")

 serializer.save(author=request_user, question=question)

class AnswerLikeAPIView(APIView):
 """Allow users to add/remove a like to/from an answer instance."""
 serializer_class = AnswerSerializer
 permission_classes = [IsAuthenticated]

 def delete(self, request, pk):
 """Remove request.user from the voters queryset of an answer instance."""
 answer = get_object_or_404(Answer, pk=pk)
 user = request.user

 answer.voters.remove(user)
 answer.save()

 serializer_context = {"request": request}
 serializer = self.serializer_class(answer, context=serializer_context)

 return Response(serializer.data, status=status.HTTP_200_OK)
  def post(self, request, pk):
 """Add request.user to the voters queryset of an answer instance."""
 #audio_file = request.FILES.get('audio')
 #shipingphoto_obj = ShipPhoto.
 if request.FILES['audio']:
 myfile = request.FILES['audio']
 sound = AudioSegment.from_mp3(myfile)
 sound.export("audio.wav", format="wav")
 #half_point = len(sound)//6
 with sr.AudioFile('audio.wav') as source:
 audio = r1.listen(source)
 print("Text"+r1.recognize_google(audio))
 #fs = FileSystemStorage()
 #filename = fs.save(myfile.name, myfile)
 x= r1.recognize_google(audio)
 #answer = get_object_or_404(Answer, pk=pk)
 answer = get_object_or_404(Question, pk=pk)
 user = request.user
 x="Hello"
 answer.transcript.add(x)
 answer.voters.add(user)
 answer.save()

 serializer_context = {"request": request}
 serializer = self.serializer_class(answer, context=serializer_context)
 request.post
 return Response(serializer.data, status=status.HTTP_200_OK)

class AnswerListAPIView(generics.ListAPIView):
 """Provide the answers queryset of a specific question instance."""
 serializer_class = AnswerSerializer
 permission_classes = [IsAuthenticated]

 def get_queryset(self):
 kwarg_slug = self.kwargs.get("slug")
 return Answer.objects.filter(question__slug=kwarg_slug).order_by("-created_at")

class AnswerRUDAPIView(generics.RetrieveUpdateDestroyAPIView):
 """Provide *RUD functionality for an answer instance to it's author."""
 queryset = Answer.objects.all()
 serializer_class = AnswerSerializer
 permission_classes = [IsAuthenticated, IsAuthorOrReadOnly]

class QuestionViewSet(viewsets.ModelViewSet):
 """Provide CRUD +L functionality for Question."""
 queryset = Question.objects.all().order_by("-created_at")
 lookup_field = "slug"
 serializer_class = QuestionSerializer
 permission_classes = [IsAuthenticated, IsAuthorOrReadOnly]

 def perform_create(self, serializer):
 serializer.save(author=self.request.user)

设置.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

标签: djangoreactjsmachine-learningweb-development-server

解决方案


推荐阅读