我需要在前端添加一个图像字段和一个音频字段。前端的用户应接受音频文件。然后,应为ml文件提供可接受的文件进行处理,并且从文件返回的文本和图像应显示在前端。我该怎么办?
models.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
view.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)
Settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')