Flask Request 请求对象 API
Request 类封装了客户端发来的 HTTP 请求的所有信息。
通过 from flask import request 导入代理对象,在视图函数中直接使用。
常用属性速查
| 属性 | 类型 | 说明 | 示例值 |
|---|---|---|---|
| method | str | HTTP 请求方法 | "GET"、"POST" |
| path | str | URL 路径部分(不含域名和查询字符串) | "/search" |
| full_path | str | 路径 + 查询字符串 | "/search?q=runoob" |
| url | str | 完整请求 URL(不含查询字符串) | "http://localhost:5000/search" |
| base_url | str | 同 url,去掉最后的查询字符串 | "http://localhost:5000/search" |
| url_root | str | 域名 + 应用根路径 | "http://localhost:5000/" |
| host | str | Host 头,含端口 | "localhost:5000" |
| host_url | str | scheme + host + 应用根 | "http://localhost:5000/" |
| scheme | str | 协议 | "http"、"https" |
| remote_addr | str | 客户端 IP 地址 | "127.0.0.1" |
| endpoint | str | 匹配到的路由 endpoint | "index"、"blog.show" |
| url_rule | Rule | 匹配到的路由规则对象 | Werkzeug Rule 实例 |
| view_args | dict | URL 中的动态变量 | {"post_id": 42} |
| blueprint | str | 当前蓝图名称 | "auth"、"blog" |
| blueprints | list | 当前匹配的蓝图层级列表 | ["auth"] |
| is_json | bool | 请求 Content-Type 是否为 JSON | True / False |
获取请求数据
| 属性/方法 | 类型 | 说明 |
|---|---|---|
| args | MultiDict | URL 查询参数。访问 /search?q=flask → request.args.get("q") |
| form | MultiDict | POST 表单数据(application/x-www-form-urlencoded 或 multipart/form-data) |
| json | dict / None | JSON 请求体(已解析为 Python 对象)。不是 JSON 请求时返回 None |
| data | bytes | 原始请求体数据 |
| files | FileMultiDict | 上传的文件。request.files["file"] 返回 FileStorage 对象 |
| cookies | dict | 客户端发来的 Cookie |
| headers | Headers | 请求头。支持多种访问方式 |
| get_json(force=False, silent=False, cache=True) | — | 解析 JSON 请求体。force 强制解析非 JSON 类型,silent 出错时返回 None |
对 args、form 等 MultiDict 类型,始终使用 .get(key, default) 方法获取值。直接用 request.args["key"] 访问不存在的键会抛出 KeyError(返回 400 错误)。
内容协商属性
| 属性/方法 | 说明 |
|---|---|
| accept_mimetypes | 客户端接受的 MIME 类型列表(MIMEAccept 对象) |
| accept_charsets | 客户端接受的字符集 |
| accept_encodings | 客户端接受的编码方式 |
| accept_languages | 客户端接受的语言 |
| content_type | 请求的 Content-Type |
| content_length | 请求体长度(字节) |
| content_md5 | 请求体的 MD5 校验值 |
代码示例
实例
from flask import Flask, request
app = Flask(__name__)
@app.route("/demo", methods=["GET", "POST"])
def demo():
# 获取查询参数
keyword = request.args.get("q", "")
# 获取表单数据
username = request.form.get("username", "")
# 获取 JSON 数据
if request.is_json:
data = request.json
name = data.get("name", "unknown")
# 获取请求头
user_agent = request.headers.get("User-Agent", "")
accept_lang = request.accept_languages.best
# 获取 URL 信息
url_info = {
"method": request.method, # "GET" 或 "POST"
"path": request.path, # "/demo"
"url": request.url, # 完整 URL
"remote_addr": request.remote_addr, # 客户端 IP
}
return url_info
app = Flask(__name__)
@app.route("/demo", methods=["GET", "POST"])
def demo():
# 获取查询参数
keyword = request.args.get("q", "")
# 获取表单数据
username = request.form.get("username", "")
# 获取 JSON 数据
if request.is_json:
data = request.json
name = data.get("name", "unknown")
# 获取请求头
user_agent = request.headers.get("User-Agent", "")
accept_lang = request.accept_languages.best
# 获取 URL 信息
url_info = {
"method": request.method, # "GET" 或 "POST"
"path": request.path, # "/demo"
"url": request.url, # 完整 URL
"remote_addr": request.remote_addr, # 客户端 IP
}
return url_info
