Django开发TTS转换器如何临时存储textarea提交数据及配置form action
问题解决方案
1. 表单action配置说明
你现有的action="/converter/"配置可以正常运行,更推荐用Django内置的URL反向解析模板标签,避免后续修改路由路径时还要同步改HTML代码,修改方式如下:
把form标签的action属性替换为:
<form action="{% url 'index' %}" method="POST">
这样不管你根路由里converter/前缀改成什么,都能自动匹配到正确的提交地址。
2. 视图代码修正
你当前的视图代码逻辑存在问题:POST请求提交的表单数据默认存在request.POST中,直接从request.session读取是拿不到数据的,而且这个场景完全不需要用到session存储,直接读取表单提交的参数调用TTS逻辑即可。
完整的视图示例代码如下:
from django.shortcuts import render from django.http import FileResponse import tempfile # 导入你自己已有的TTS转换函数 from your_tts_module import tts_convert def index(request): if request.method == 'POST': # 直接从POST请求拿表单参数,不需要存session text_to_be_converted = request.POST.get('text_content', '').strip() language = request.POST.get('language', 'mandarin').strip() # 校验参数非空 if not text_to_be_converted: return render(request, 'index.html', {'error': '请输入要转换的文本内容'}) # 生成临时文件,delete=True表示文件关闭后自动删除 with tempfile.NamedTemporaryFile(suffix='.wav', delete=True) as tmp_file: # 调用你自己的TTS函数,把生成的音频写入临时文件 tts_convert(text=text_to_be_converted, lang=language, output_path=tmp_file.name) # 重置文件指针到开头 tmp_file.seek(0) # 返回文件下载响应 response = FileResponse(tmp_file, as_attachment=True, filename=f'tts_output.wav') response['Content-Type'] = 'audio/wav' return response # GET请求直接返回转换页面 return render(request, 'index.html')
3. 额外说明
- 你不需要用sqlite存储提交记录,也不需要用session存参数,表单提交的参数直接在单次请求里处理完就结束,不会占用服务器额外存储资源
- 上述代码中用的临时文件会在下载响应返回后自动删除,完全符合你的需求
- 如果生成的音频文件很大,可以改用流式响应直接返回音频流,不需要在本地写临时文件,性能更高
内容的提问来源于stack exchange,提问作者dragonfly
相关产品推荐
相关产品推荐

