Python 中 getlist() 方法详解
首先需要明确的是,getlist() 并不是 Python 语言的内置函数(如 len() 或 list()),它通常出现在 Python 的 Web 框架(如 Flask 和 Django)中,用于处理 HTTP 请求中的多值参数。
在 Web 开发中,当一个表单提交了多个同名参数(例如复选框 Checkbox 或 多选下拉列表)时,标准的 get() 方法只能获取到最后一个值,而 getlist() 可以获取到所有被选中的值。
在 Flask 框架中的使用
在 Flask 中,getlist() 是 request.form(POST 请求)或 request.args(GET 请求)对象的方法。
使用场景
假设你有一个 HTML 表单,允许用户选择多个兴趣爱好:
<form method="POST">
<input type="checkbox" name="hobby" value="Reading"> 阅读
<input type="checkbox" name="hobby" value="Coding"> 编程
<input type="checkbox" name="hobby" value="Music"> 音乐
<button type="submit">提交</button>
</form>
Python 代码实现
from flask import Flask, request
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
# 使用 get() 只能获取到最后一个选中的值
single_hobby = request.form.get('hobby')
# 使用 getlist() 获取所有选中的值,返回一个列表
all_hobbies = request.form.getlist('hobby')
return f"单个值: {single_hobby}, 所有值: {all_hobbies}"
在 Django 框架中的使用
在 Django 中,getlist() 是 request.POST 或 request.GET(它们是 QueryDict 类型)的方法。
Python 代码实现
def my_view(request):
# 获取 GET 请求中所有名为 'category' 的参数

# URL 示例: /search?category=python&category=java&category=cpp
categories = request.GET.getlist('category')
# 获取 POST 请求中所有名为 'tags' 的参数
tags = request.POST.getlist('tags')
return HttpResponse(f"选中的分类有: {', '.join(categories)}")
get() 与 getlist() 的核心区别
| 特性 | get() |
getlist() |
|---|---|---|
| 返回值类型 | 字符串(或指定的默认值) | 列表 (List) |
| 处理多值 | 仅返回该键对应的 最后一个 值 | 返回该键对应的 所有 值 |
| 无值情况 | 返回 None 或自定义默认值 |
返回一个 空列表 [] |
| 适用场景 | 单选框、文本输入框、隐藏域 | 复选框、多选列表 |
总结与注意事项
- 数据类型:
getlist()始终返回一个列表,即使只有一个值被选中,它也会将其包装在列表中(['Reading'])。 - 安全性:在使用
getlist()获取的数据进行数据库查询(如IN查询)之前,建议对列表内容进行校验或过滤,以防止恶意输入。 - 适用对象:这个方法仅适用于处理 HTTP 请求参数的特定对象(如 Flask 的
MultiDict或 Django 的QueryDict),不能在普通的 Python 字典(dict)上使用。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/490848.html



