You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:45:13