You need to enable JavaScript to run this app. Django开发TTS转换器如何临时存储textarea提交数据及配置form action
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 09:06:04