You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用中跨方法访问变量问题求助

我来帮你捋清楚问题所在,然后给出能正常运行的解决方案~

为什么你的代码无法运行?

Flask是无状态的Web框架,每个请求都是独立的:

  • original_text_form里的summary是函数内部的局部变量,当这个请求处理完,变量就会被销毁,不会留到下一个请求。
  • 你写的x = original_text_form只是拿到了函数的对象,并没有执行函数获取之前生成的summary;就算你调用x(),也会重新触发一次/templates的请求逻辑(还会因为没有表单数据报错),根本拿不到之前的结果。

可行解决方案:用Flask Session跨请求存储数据

Session可以在同一个用户的多个请求之间临时保存数据,刚好适合你这种“生成摘要后再保存”的场景。

步骤1:给Flask应用设置加密密钥

Session数据会被加密存储在用户的Cookie里,所以必须设置一个密钥:

app = Flask(__name__)
# 随便写一个复杂的字符串,比如用随机生成的密钥,线上环境要保密!
app.secret_key = 'my-super-secret-key-12345-abcdef'

步骤2:在生成摘要的函数里把summary存入Session

修改original_text_form,把生成的摘要存到session中:

from flask import session  # 别忘了导入session

@app.route('/templates', methods=['POST'])
def original_text_form():
    title = "Summarizer"
    text = request.form['input_text']
    max_value = sent_tokenize(text)
    num_sent = int(request.form['num_sentences'])
    sum1 = summarize()
    summary = sum1.get_summary(text, num_sent)
    print(summary)

    # 把摘要存入session,后续请求就能拿到
    session['generated_summary'] = summary

    return render_template("index.html", 
                           title=title, 
                           original_text=text, 
                           output_summary=summary, 
                           num_sentences=len(max_value))  # 这里你之前传的是列表,应该传句子数量更合理

步骤3:在保存函数中从Session取出摘要并写入文件

修改saveToFile,从session中获取之前的摘要:

@app.route('/savetextfile', methods=['POST'])
def saveToFile():
    # 从session中取出摘要,没有的话返回提示
    summary = session.get('generated_summary')
    if not summary:
        return render_template("index.html", error_msg="请先生成摘要再尝试保存哦!")

    # 注意用'w'模式写文本,'wb'是二进制模式,会报错
    file_path = '/Users/johnsriskandarajah/Documents/summarizer-master/summary.txt'
    with open(file_path, 'w', encoding='utf-8') as filehandle:
        filehandle.write(summary)

    # 返回保存成功的提示
    return render_template("index.html", save_success=True)

其他注意事项

  • 如果你的summary是列表类型(比如句子列表),写入文件前要转成字符串,比如filehandle.write('\n'.join(summary))。
  • 如果你不想用Session,也可以在生成摘要后,把summary作为隐藏表单字段,提交保存请求时一起传递,但这种方式只适合一次性提交的场景,Session更灵活。

内容的提问来源于stack exchange,提问作者j-s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:30:07