现在位置: 首页 > Flask 教程 > 正文

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

argsform 等 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