如何在 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 重定向视图函数而不使用查询字符串?的主要内容,如果未能解决你的问题,请参考以下文章