Flask开发中点击浏览器刷新按钮仍发送POST请求如何解决?
现有代码问题说明
你当前的代码存在逻辑顺序错误:return render_template('signup.htm') 放置在POST请求处理逻辑之前,无论收到GET还是POST请求都会直接返回模板,后续的POST处理代码永远不会执行,需要先调整代码顺序。
刷新触发POST请求的原因
用户提交表单完成POST请求后,浏览器会默认将最后一次发起的请求记录为POST,点击刷新时浏览器会自动重发上一次的请求,就会出现重复提交POST的问题,部分浏览器还会弹出「是否重新提交表单」的提示。
实现刷新仅发送GET请求的方案
可以通过 POST/Redirect/GET(PRG) 模式解决,处理完POST请求后不要直接返回页面,而是返回重定向响应,让浏览器主动发起GET请求加载页面,此时浏览器记录的最后一次请求就是GET,刷新时就只会发送GET请求。
修正后的示例代码
from flask import redirect, url_for, request, render_template @app.route('/signup', methods=["GET", "POST"]) def signup(): if request.method == "POST": # 你的业务逻辑:表单校验、数据写入数据库等 password = request.form['password'] username = request.form['username'] # 处理完成后重定向,可根据需求跳转到注册页、登录页等 return redirect(url_for('signup')) # 仅GET请求时返回注册页面模板 return render_template('signup.htm')
内容的提问来源于stack exchange,提问作者DarthTensor
相关产品推荐
相关产品推荐

