Flask URL重定向时如何保存surname参数?是否需要使用数据库?
Flask重定向携带参数实现方案
首先明确:该需求不需要使用数据库即可实现,以下是三种常用的实现方案:
方案1:将surname作为路由路径参数传递
这是最直接的实现方式,重定向时同时携带两个参数,修改目标路由规则接收即可:
from flask import Flask, redirect, url_for app = Flask(__name__) @app.route('/') def index(): name = 'Paul' surname = 'Morphy' # 重定向时传入两个参数 return redirect(url_for('name', name=name, surname=surname)) # 路由规则适配两个参数 @app.route('/<string:name>/<string:surname>') def name(name, surname): return f'My name is {name} {surname}' if __name__ == '__main__': app.run(debug=True)
适用场景:参数为公开内容,可直接暴露在URL路径中,重定向后URL格式为/Paul/Morphy。
方案2:使用查询字符串传递参数
如果不想修改原有路由的路径结构,可以把surname作为查询参数传递:
from flask import Flask, redirect, url_for, request app = Flask(__name__) @app.route('/') def index(): name = 'Paul' surname = 'Morphy' return redirect(url_for('name', name=name, surname=surname)) @app.route('/<string:name>') def name(name): # 从请求的查询参数中获取surname surname = request.args.get('surname', '') return f'My name is {name} {surname}' if __name__ == '__main__': app.run(debug=True)
适用场景:不想调整路由路径结构,参数为公开内容,重定向后URL格式为/Paul?surname=Morphy。
方案3:使用session存储参数(参数不暴露在URL)
如果需要隐藏参数,可使用Flask自带的session实现,无需数据库:
from flask import Flask, redirect, url_for, session app = Flask(__name__) # 使用session必须先配置SECRET_KEY app.config['SECRET_KEY'] = '自定义的任意加密字符串' @app.route('/') def index(): name = 'Paul' surname = 'Morphy' # 把surname存入session session['surname'] = surname return redirect(url_for('name', name=name)) @app.route('/<string:name>') def name(name): # 从session中取出surname surname = session.get('surname', '') return f'My name is {name} {surname}' if __name__ == '__main__': app.run(debug=True)
适用场景:参数不希望暴露在URL中,session默认存储在用户浏览器的加密cookie中,服务端无需额外存储。
你可以根据实际业务需求选择对应的实现方案,均不需要额外接入数据库。
内容的提问来源于stack exchange,提问作者Aravinth Balakrishnan
相关产品推荐
相关产品推荐

