使用来自 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)
在我的代码中,我们首先导入 redirect
和 url_for
。
我们创建了 2 条路线 index
和 admin
.
在 index
路由中,我们输出一个简单的响应,并将名称传递给 url。所以如果我们得到 example.com/John
它将输出 Hello John!
.
在 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}")
希望对您有所帮助:)
我 运行 在尝试使用以下方法在 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)
在我的代码中,我们首先导入
redirect
和url_for
。我们创建了 2 条路线
index
和admin
.在
index
路由中,我们输出一个简单的响应,并将名称传递给 url。所以如果我们得到example.com/John
它将输出Hello John!
.在
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}")
希望对您有所帮助:)