
【flask框架学习】解决Flask框架浏览器默认会记录最后一次请求,即2次发送POST请求问题
当程序报No module named 'triton.ops’时候,可以换版本安装。
·
问题
进行在调用POST请求是发现刷新页面会执行上一次的POST请求,这样很不爽,但是对应新手小白来说,这个常识自己又不知道,因此询问deepseek,完美解决。
问题分析
你的代码逻辑中,当用户提交 POST 请求时,直接返回了渲染后的模板 ai_generated_image_demo.html:
if request.method == 'POST':
return render_template('ai_generated_image_demo.html', ...)
这导致浏览器将最后一次请求记录为 POST,刷新时会 重新提交相同的 POST 请求,触发重复生成。
解决方案:使用 Post/Redirect/Get (PRG) 模式
通过 重定向到 GET 请求 来分离表单提交(POST)和结果展示(GET),确保刷新页面时不会重复提交。
修改后的代码
from flask import Flask, request, redirect, url_for, session, render_template
from flask_login import current_user # 假设你用了 Flask-Login
@app.route('/AI_generated_image', methods=['GET', 'POST'])
def AI_generated_image():
# 登录检查
if not current_user.is_authenticated:
return redirect(url_for('login_in', next=request.url))
if request.method == 'POST':
try:
# 执行生成图像的逻辑(替换为你的实际代码)
image_path = generate_image() # 假设这是生成图像的函数
# 将生成的图像路径暂存到 Session
session['generated_image_path'] = image_path
# 重定向到 GET 请求,避免刷新重复提交
return redirect(url_for('show_generated_image'))
except Exception as e:
# 处理错误
return str(e)
# GET 请求时,渲染页面(首次访问或刷新后)
return render_template(
'ai_generated_image_demo.html',
examples=examples,
my_images=my_images,
models=app.config['MODELS'],
image_path=session.get('generated_image_path'), # 从 Session 中读取
system_prompt="请输入您的提示词..."
)
@app.route('/generated_result')
def show_generated_image():
# 安全校验(可选)
if 'generated_image_path' not in session:
return redirect(url_for('AI_generated_image'))
# 直接渲染模板(GET 请求专用路由)
return render_template(
'ai_generated_image_demo.html',
examples=examples,
my_images=my_images,
models=app.config['MODELS'],
image_path=session.get('generated_image_path'),
system_prompt="请输入您的提示词..."
)

欢迎来到由智源人工智能研究院发起的Triton中文社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。
更多推荐
所有评论(0)