我正在开发一个Web应用程序,在该应用程序中,用户上传视频,然后我们对其进行语音识别,然后将其文本翻译为另一种语言。因此,如果请求是POST,则我们调用该函数来执行这些功能,如果request是GET,它不应调用它,但就我而言,在POST请求上,先执行函数,然后提交POST请求。它对数据库中的最后一个视频执行功能。
即使我将函数调用放在POST请求条件语句的末尾,并且如果我将函数调用放在POST请求条件的末尾,它也会得到相同的结果,该函数在每次不需要的页面重载时都调用,并且我也不需要知道其他解决方法。
Array#get
我希望首先提交POST请求,然后我们将新提交的文件的路径传递给函数调用,但实际输出是在执行函数POST请求提交后首先调用该函数。
我们将不胜感激任何帮助。
答案 0 :(得分:1)
仅当表单有效且模型已保存时,才应进行处理。这样一来,您就可以在保存表单之前获取最后一个模型,这意味着您是在作用于先前的模型,而不是当前的模型。
将您的字幕功能移至form.is_valid()
检查中,然后从保存的模型中获取保存文件的路径,并将其提供给您的处理功能。
def generatingsubtitle(request):
if request.method == 'POST':
form = forms.VideoForm(request.POST or None, request.FILES or None)
if form.is_valid():
# first save the model
video_model = form.save()
# get the path of the saved file from the model
video_path = video_model.videofile.path
# this may not be necessary anymore?
[filename, ext] = os.path.splitext(video_model.videofile.name)
srtpath = settings.STATIC_ROOT + filename
# generate subtitles
main(video_path, srtpath)
return HttpResponseRedirect(reverse('generatingsubtitle'))
答案 1 :(得分:0)
除非方法为“ POST”,否则不应查询数据库。试试这个。
def generatingsubtitle(request):
filename = os.path.splitext(videofile.name)[0]
videofile = latestvideo.videofile
if request.method == 'POST':
form = forms.VideoForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
latestvideo = Video.objects.last()
path = settings.MEDIA_ROOT + videofile.name
srtpath=settings.STATIC_ROOT+filename
#function call
main(path, srtpath)
return HttpResponseRedirect(reverse('generatingsubtitle'))
else:
form = VideoForm() #edit
context = {
'form': form,
'videofile': videofile,
'filename':filename,
}
return render(request, 'app/generate.html', context)