request.args.get() 是 Flask 中获取 GET 查询参数最常用且安全的方式,它从 URL 问号后的键值对中提取值,未传时返回 None;需区分路径参数(由路由自动注入)与查询参数,同名多值用 getlist(),中文等字符由 Flask 自动解码。

request.args.get() 是最常用的方式
Flask 中获取 GET 参数的核心是 request.args,它是一个类似字典的对象,封装了 URL 查询字符串里的键值对。直接调用 request.args.get("key") 就能安全取值,没传时返回 None,不会报错。
常见错误是误用 request.form(那是 POST 表单用的)或直接访问 request.args["key"](键不存在会抛 KeyError)。
- 推荐始终用
.get(),可加默认值:request.args.get("page", "1") - 如果参数可能有多个同名值(比如多选 checkbox),用
request.args.getlist("tag") -
request.url和request.base_url可分别拿到完整 URL 和不含查询参数的基础 URL
URL 路径参数和查询参数别混淆
GET 请求的“URL 参数”严格指问号后面的查询参数(?name=alice&age=25),不是路由路径里的变量(如 /user/<id></id>)。后者由 Flask 路由机制自动解析到视图函数参数里,和 request.args 无关。
比如访问 /search?q=python&sort=desc,q 和 sort 是查询参数;但访问 /api/v1/users/123,123 是路径参数,应通过函数签名接收:def get_user(id):。
- 路径参数走路由定义,查询参数走
request.args - 两者可以共存:访问
/posts/5?draft=true,5是路径参数,draft是查询参数
中文或特殊字符参数要留意编码
浏览器会对 URL 中的中文、空格、符号做 URL 编码(如 测试 → %E6%B5%8B%E8%AF%95),Flask 默认能自动解码,一般不用手动处理。但如果前端用了非标准编码方式,或者参数来自某些旧系统,可能出现乱码。
- 检查原始编码:打印
request.query_string(bytes 类型)看是否为预期的 UTF-8 编码 - 不建议手动调用
urllib.parse.unquote(),Flask 已在request.args内部完成解码 - 若发现乱码,优先确认前端请求头是否声明了
Accept-Charset: utf-8,以及 URL 构造时是否已正确 encode
调试时怎么快速查看所有 GET 参数
开发中经常需要确认客户端到底传了什么,最简单的方法是在视图里加一行日志或返回:
print(dict(request.args))
或者更直观地返回结构化数据用于调试:
return {"args": dict(request.args)}
注意不要在生产环境直接返回全部参数,尤其含敏感字段(如 token、callback)时需过滤。
-
dict(request.args)能把MultiDict转成普通字典,但会丢弃重复键的后续值 - 需要保留全部(如多选提交),用
request.args.to_dict(flat=False),返回每个 key 对应 list - Chrome 开发者工具 Network 标签页里点请求 → Headers → Query String Parameters,是最准的源头验证方式
实际写的时候,多数情况一行 request.args.get("xxx") 就够了,但得清楚它背后不处理路径参数、不负责解码失败兜底、也不过滤恶意输入——这些都得自己判断场景补上。











