如何在 Flask 上使用 args 重定向视图函数而不使用查询字符串?

Posted

技术标签:

【中文标题】如何在 Flask 上使用 args 重定向视图函数而不使用查询字符串?【英文标题】:How redirect with args for view function without query string on Flask? 【发布时间】:2015-11-15 00:29:09 【问题描述】:

我想将用户重定向到相同的路径,但参数不同。

这是我的代码:

@app.route('/foo')
def foo(args1=None, args2=None):
    return render_template('foo.html', args1=args1, args2=args2)

@app.route('/bar')
def redirect_to_foo():
    return redirect(url_for('foo', args1='something'))

但是当我看到 url 路径时,显示的是 /foo?arg1=something... 。 如何使用 args 重定向但没有查询字符串? 有没有办法做到这一点?

【问题讨论】:

查看相关programmers.stackexchange.com/questions/99894/…。 HTML 没有 POST 重定向。如果您将使用 Status-Code 307 实现它,用户将收到提示。另一种方法是在发送 301 重定向代码之前将参数保存在会话中。 另见***.com/questions/2068418/…。 【参考方案1】:

在 HTTP 1.1 中,实际上有一个status code (307),表示应该使用相同的方法重复请求并发布数据。尝试使用 HTTP 状态码 307 Internal Redirect 而不是 302。对于烧瓶有一个参数code。

@app.route('/bar', methods=['POST'])
def redirect_to_foo():
    return redirect(url_for('foo', args1='something'), code=307)

来源:Redirecting to URL in Flask

作为背景,还可以看看我在 OP 中的 cmets。

提示:也许我的回答不正确。我不明白您为什么要使用不同的参数进行重定向。在重定向标头旁边将“不同参数”作为 HTTP 有效负载发回是 AFAIK(GET/“in query string”除外)是不可能的。如果您真的必须这样做,请考虑结构。

【讨论】:

谢谢。我尝试了 307 重定向,但重定向的 url 仍然是 /foo?args=something . @Jonycruse 它会工作。您的初始请求也必须是 POST 请求。

以上是关于如何在 Flask 上使用 args 重定向视图函数而不使用查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章

Flask视图和URL

Flask(重定向和错误响应 六)

测开之路一百二十八:flask之重定向和404

三十python之Flask框架视图:返回状态码重定向状态保持请求钩子

如何在 Flask 模板中制作重定向按钮

Flask 重定向问题:若没有对URL进行安全验证