在Flask中,request 对象提供了多种方法和属性来访问客户端请求的数据。以下是主要的 request 方法列表:

常用属性和方法

1. 请求数据访问

request.data  # 原始请求体数据(字节字符串)
request.get_data()  # 获取原始数据,可设置缓存和as_text参数
request.get_json()  # 解析JSON数据,返回Python字典
request.form  # 表单数据(MultiDict)
request.args  # URL查询参数(MultiDict)
request.values  # 表单和查询参数的组合
request.files  # 上传的文件(MultiDict)

2. 请求头信息

request.headers  # 请求头信息
request.cookies  # cookies字典
request.authorization  # 认证信息
request.user_agent  # 用户代理信息

3. URL相关信息

request.url  # 完整URL
request.base_url  # 基础URL(不含查询参数)
request.host_url  # 主机URL
request.path  # URL路径部分
request.full_path  # 路径+查询参数
request.host  # 主机名(含端口)
request.script_root  # 脚本根路径

4. 请求方法信息

request.method  # 请求方法(GET, POST等)
request.endpoint  # 对应的端点名称
request.blueprint  # 蓝图名称
request.view_args  # URL规则匹配的参数

5. 其他属性

request.remote_addr  # 客户端IP地址
request.environ  # WSGI环境字典
request.is_json  # 检查请求是否有JSON内容类型
request.is_secure  # 检查是否使用HTTPS
request.scheme  # 请求方案(http或https)

使用示例

from flask import Flask, request

app = Flask(__name__)

@app.route('/example', methods=['GET', 'POST'])
def example():
    # 获取查询参数
    name = request.args.get('name', 'default')
    
    # 获取表单数据
    if request.method == 'POST':
        username = request.form.get('username')
        email = request.form.get('email')
    
    # 获取JSON数据
    if request.is_json:
        data = request.get_json()
    
    # 获取上传的文件
    file = request.files.get('file')
    if file:
        file.save('uploaded_file.txt')
    
    # 获取请求头
    user_agent = request.headers.get('User-Agent')
    
    return f"Hello {name}, User-Agent: {user_agent}"

注意事项

  1. MultiDict 方法request.form, request.args, request.files 返回的是 MultiDict 对象,支持:

    • .get(key) - 获取第一个值

    • .getlist(key) - 获取所有值的列表

    • .keys() - 获取所有键

  2. JSON 解析request.get_json() 可以接受参数:

    • force=True - 强制解析,即使Content-Type不是application/json

    • silent=True - 解析失败时返回None而不是抛出异常

  3. 数据缓存request.get_data(cache=True) 可以缓存请求数据,避免多次读取。