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

为何redirect命令会将POST转为GET?Flask路由相关疑问解析

问题与代码

代码片段

25   @app.route("/", methods=["GET", "POST"])
26   def index():
27    if request.method == "POST":
28
29        # TODO: Add the user's entry into the database
30
31        return redirect("/")
32
33    else:
34
35        # TODO: Display the entries in the database on index.html
36
37        return render_template("index.html", birthdays)

疑问

  1. redirect("/")是否意味着回到第25行的路由?为何这不会造成无限循环?
  2. 执行redirect()后请求方法似乎会变为GET,是否确实如此?
  3. 为何redirect命令会将POST方法转为GET?

解答
  • redirect("/")指向的路由及无循环原因
    没错,redirect("/")就是让浏览器重新请求第25行定义的根路由/。不会触发无限循环是因为:当前是在处理POST请求时执行的redirect,浏览器收到重定向响应后,会发送一个全新的GET请求到/,此时进入index函数会走else分支(因为请求方法是GET),不会再触发POST分支里的redirect,自然不会循环。

  • 执行redirect()后请求方法是否变为GET
    确实是这样。浏览器接收到重定向响应后,会自动发起GET请求到目标地址,原有的POST方法不会被保留。

  • 为何redirect会将POST转为GET
    这是HTTP协议的规定:Flask的redirect默认返回302状态码(临时重定向),根据协议规范,浏览器处理POST请求得到的3xx重定向响应时,会自动改用GET方法请求目标地址。这是Web开发里的Post/Redirect/Get(PRG)模式,核心作用是防止表单重复提交——用户刷新页面时,只会触发GET请求,不会重复执行POST对应的数据库插入操作,避免数据重复。

内容的提问来源于stack exchange,提问作者parmer_110

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:31:01