python - 如果http请求在Django视图中是POST,如何调用函数并将新提交的文件名传递给函数调用?
问题描述
我正在开发网络应用程序,其中用户上传视频,我们对其执行语音识别,然后将其文本翻译成另一种语言。所以,如果请求是 POST,那么我们调用执行这些功能的函数,如果请求是 GET它不应该调用它,但在我的情况下,在 POST 请求中,函数首先执行,然后提交 POST 请求。它对数据库中的最后一个视频执行功能。
即使我将函数调用放在 POST 请求条件语句的末尾,并且如果我将函数调用置于 POST 请求条件之外,它也会给出相同的结果,每次重新加载页面时都会调用函数调用,这不是必需的,我不知道其他方式如何解决这个问题呢。
"""Django==2.0.2 views.py"""
def generatingsubtitle(request):
latestvideo = Video.objects.last()
videofile = latestvideo.videofile
path = settings.MEDIA_ROOT + videofile.name
filename = os.path.splitext(videofile.name)[0]
srtpath=settings.STATIC_ROOT+filename
if request.method == 'POST':
#function call
main(path, srtpath)
form = forms.VideoForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('generatingsubtitle'),
)
else:
form = VideoForm()
return render(request, 'app/generate.html', {
'form': form,
'videofile': videofile,
'filename':filename,
},
)
我希望首先提交 POST 请求,我们获取新提交文件的路径并将其传递给函数调用,但实际输出是,在提交执行函数 POST 请求后首先调用函数。
任何帮助将不胜感激。
解决方案
您应该仅在表单有效且模型已保存时进行处理。你拥有它的方式,你在表单被保存之前获取最后一个模型,这意味着你正在对以前的模型进行操作,而不是当前的模型。
将您的字幕功能移动到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'))
推荐阅读
- javascript - 我怎样才能保留所有这些 html 文件?
- async-await - Yeoman,在 composeWith 之前使用 yosay
- arrays - 如果对象存在,如何_update_数组内的Mongo对象,如果不存在,将其添加到数组中?
- amazon-web-services - CloudFormation 无权执行:iam:PassRole on resource
- python - Conversion types in Python
- function - What is the difference between a cmdlet and a function?
- javascript - 导入语句末尾的意外字符
- android - 如何使用 Android 存储图像并从 SQLite 检索它?
- python - Python not creating a file(csv or txt)
- symfony - 403 禁止访问 Symfony2 项目