如何阻止Python Flask自动合并同名请求参数?
解决Flask阻止合并同名请求参数的问题
方法一:用Flask自带的getlist()方法直接获取
Flask里的request.args其实是ImmutableMultiDict类型,它本来就支持获取同名参数的所有值,根本不用额外解析URL。别用get()方法(它会把同名参数合并成逗号分隔的字符串),换成getlist()就行:
from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): # 请求/?name=a&name=b时,这里直接拿到['a', 'b'] name_list = request.args.getlist('name') # 这里写你的处理逻辑 return str(name_list) if __name__ == '__main__': app.run()
方法二:手动解析原始查询字符串(需要底层控制时用)
如果你非要手动处理原始的查询字符串,注意parse_qs本身就会把同名参数整理成列表,你之前代码里的split(',')纯粹是画蛇添足——比如/?name=a&name=b被parse_qs解析后直接是{'name': ['a', 'b']},不需要再拆逗号(反而会搞砸本身带逗号的参数值)。修正后的代码:
from urllib.parse import parse_qs from flask import Flask, request app = Flask(__name__) @app.route('/') def index(): query_string = request.query_string.decode() parameters = parse_qs(query_string) # 直接取name对应的列表,没有就返回空列表 name_list = parameters.get('name', []) # 这里写你的处理逻辑 return str(name_list) if __name__ == '__main__': app.run()
为啥你之前的代码没解决问题?
你之前用了split(','),这是错的——因为只有当你用request.args.get('name')时,Flask才会把列表合并成a,b的字符串,而parse_qs已经正确把同名参数分成列表了,你拆分逗号反而把正确的结果搞坏了。
内容的提问来源于stack exchange,提问作者NO NAME
相关产品推荐
相关产品推荐

