Flask中URL同名多值查询参数第二个值丢失问题及解决方案
解决方案
核心修改点是使用Flask request.args 内置的getlist()方法获取所有同名name参数的取值,而非直接取单值。
修改后的完整代码
@app.route('/obj', methods=['GET']) def api_name(): # 检查URL中是否提供了name参数 # 若提供则获取所有同名name参数的列表 # 未提供则在浏览器中返回错误 if 'name' in request.args: # 改动点:用getlist获取所有同名参数值 name_list = request.args.getlist('name') else: return "Error: No name field provided. Please specify an name." # 为查询结果创建空列表 results = [] # 遍历数据匹配符合请求name的结果 for n in obj: if n['name'] in name_list: results.append(n) # 使用Flask的jsonify函数将Python字典列表转换为JSON格式 return jsonify(results)
改动说明
- 把原来直接取
request.args['name']的逻辑替换为request.args.getlist('name'),该方法会返回所有同名name参数组成的列表,比如请求/obj?name=a&name=b时,返回值为['a', 'b'] - 把匹配逻辑从判断
n['name'] == name改为判断n['name'] in name_list,即可同时匹配多个传入的name参数值
测试请求/obj?name=a&name=b时,会返回预期结果:
[{"name":"a","class":"x"},{"name":"b","class":"y"}]
内容的提问来源于stack exchange,提问作者Sanjeeth
相关产品推荐
相关产品推荐

