使用来自 url 的路径在 Flask 中重定向

Redirecting in Flask with path from url

我 运行 在尝试使用以下方法在 Flask 中重定向时遇到问题:

 @views.route('/dash_monitoring/<path:url>')
 @login_required
 def monitoring_page(url):
     return redirect("/home/dash_monitoring/{}".format(url))

<path:url> 中的 url 格式为 https://somesite.com/detail/?id=2102603 但是当我尝试在函数中打印它时,它只打印 https://somesite.com/detail 而没有 id 部分,所以它显然重定向到 /home/dash_monitoring/https://somesite.com/detail 而不是 /home/dash_monitoring/https://somesite.com/detail/?id=2102603.

我应该怎么做才能保留 id 部分并重定向到右侧 url?

这个有一个简单的解决方法,我们使用url_for函数:

from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/<name>')
def index(name):
     return f"Hello {name}!"

@app.route('/admin')
def admin():
     return redirect(url_for('index',name = 'John'))

if __name__ == '__main__':
     app.run(debug = True)
  1. 在我的代码中,我们首先导入 redirecturl_for

  2. 我们创建了 2 条路线 indexadmin.

  3. index 路由中,我们输出一个简单的响应,并将名称传递给 url。所以如果我们得到 example.com/John 它将输出 Hello John!.

  4. admin 路由中,我们将用户重定向到 index 路由,因为它不是管理员(这是一个简单的示例,您可以使用你想要什么)。 index 路由需要一个名称,所以我们在 url_for 函数内部传递一些上下文,以便它可以显示名称。

您可以使用 request.url 并暗示字符串操作:

@views.route('/dash_monitoring/<path:url>')
@login_required
def monitoring_page(url):
    parsed_path = request.url.split('/dash_monitoring/')[1]
    #return the parsed path
    return redirect("/home/dash_monitoring/{}".format(parsed_path))

或者,您可以遍历 request.args 以创建查询字符串并使用 args

构建路径
@views.route('/dash_monitoring/<path:url>')
@login_required
def monitoring_page(url):
    query_string = ''
    for arg,value in request.args.items():
        query_string+=f"{arg}={value}&"
    query_string=query_string[:-1] # to remove & at the end
    path=f"{path}?{query_string}"
    #return the parsed path
    return redirect(f"/home/dash_monitoring/{path}")

希望对您有所帮助:)