问题

进行在调用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="请输入您的提示词..."
    )
Logo

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

更多推荐