【WEB开发】Flask的request对象获取HTTP请求的数据

Flask 中的 request 对象提供了多种方法,用于获取 HTTP 请求中的数据。以下是常用的 request 方法及其功能、示例代码,以及与之对应的前端 fetch 请求示例。


1. request.get_data()

  • 功能: 获取 HTTP 请求体的原始数据(bytes 类型),无视请求头内容。
  • 适用场景: 用于接收非标准格式(如二进制文件或自定义协议)的请求数据。

Flask 后端:

python 复制代码
@app.route('/upload', methods=['POST'])
def upload():
    raw_data = request.get_data()  # 获取原始二进制数据
    with open('uploaded_file.bin', 'wb') as f:
        f.write(raw_data)  # 保存到文件
    return 'Data received!'

前端 fetch 示例:

javascript 复制代码
const binaryData = new Uint8Array([0x01, 0x02, 0x03]); // 模拟二进制数据
fetch('/upload', {
    method: 'POST',
    body: binaryData,
});

2. request.get_json()

  • 功能: 解析 JSON 数据并返回字典对象。
  • 适用场景: 客户端发送 application/json

式的数据请求。

Flask 后端:

python 复制代码
@app.route('/json', methods=['POST'])
def process_json():
    json_data = request.get_json()  # 自动解析 JSON 数据为 Python 字典
    name = json_data.get('name', 'Unknown')
    age = json_data.get('age', 0)
    return f"Received name: {name}, age: {age}"

前端 fetch 示例:

javascript 复制代码
fetch('/json', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({ name: 'Alice', age: 30 }),
});

3. request.form

  • 功能: 获取 application/x-www-form-urlencodedmultipart/form-data 格式的表单数据。
  • 适用场景: 表单提交或模拟表单方式传递数据。

Flask 后端:

python 复制代码
@app.route('/form', methods=['POST'])
def process_form():
    name = request.form.get('name')  # 获取表单字段
    age = request.form.get('age')
    return f"Form data - Name: {name}, Age: {age}"

前端 fetch 示例:

javascript 复制代码
const formData = new URLSearchParams();
formData.append('name', 'Bob');
formData.append('age', '25');

fetch('/form', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
    },
    body: formData,
});

4. request.args

  • 功能: 获取 URL 查询字符串参数。
  • 适用场景: 处理 GET 请求的查询参数。

Flask 后端:

python 复制代码
@app.route('/query', methods=['GET'])
def process_query():
    name = request.args.get('name', 'Guest')  # 从查询参数获取数据
    age = request.args.get('age', 'unknown')
    return f"Query data - Name: {name}, Age: {age}"

前端 fetch 示例:

javascript 复制代码
fetch('/query?name=Eve&age=22', {
    method: 'GET',
});

5. request.files

  • 功能: 获取上传的文件对象。
  • 适用场景: 文件上传处理。

Flask 后端:

python 复制代码
@app.route('/upload_file', methods=['POST'])
def upload_file():
    file = request.files['file']  # 获取文件对象
    file.save(f"./uploads/{file.filename}")  # 保存到本地
    return f"File {file.filename} uploaded successfully!"

前端 fetch 示例:

javascript 复制代码
const fileInput = document.querySelector('input[type="file"]');
const formData = new FormData();
formData.append('file', fileInput.files[0]);

fetch('/upload_file', {
    method: 'POST',
    body: formData,
});

6. request.json

  • 功能: 获取 JSON 数据的快捷方式,相当于 request.get_json()

Flask 后端:

python 复制代码
@app.route('/json_short', methods=['POST'])
def json_short():
    json_data = request.json
    return f"Received: {json_data}"

7. request.values

  • 功能: 同时获取表单数据(form)和查询参数(args),优先返回表单数据。
  • 适用场景: 混合数据传递。

Flask 后端:

python 复制代码
@app.route('/values', methods=['GET', 'POST'])
def process_values():
    value = request.values.get('key', 'default')
    return f"Value: {value}"

前端 fetch 示例:

javascript 复制代码
fetch('/values?key=queryValue', {
    method: 'POST',
    body: new URLSearchParams({ key: 'formValue' }),
});

8. request.headers

  • 功能: 获取请求头的键值对。
  • 适用场景: 检查客户端传递的自定义头部。

Flask 后端:

python 复制代码
@app.route('/headers', methods=['GET'])
def process_headers():
    user_agent = request.headers.get('User-Agent', 'Unknown')
    return f"User-Agent: {user_agent}"

前端 fetch 示例:

javascript 复制代码
fetch('/headers', {
    method: 'GET',
    headers: {
        'Custom-Header': 'HeaderValue',
    },
});

9. request.cookies

  • 功能: 获取客户端发送的 Cookie 数据。
  • 适用场景: 处理用户会话或持久化信息。

Flask 后端:

python 复制代码
@app.route('/cookies', methods=['GET'])
def process_cookies():
    session_id = request.cookies.get('session_id', 'No Session')
    return f"Session ID: {session_id}"

前端 fetch 示例:

javascript 复制代码
document.cookie = "session_id=12345";
fetch('/cookies', {
    method: 'GET',
    credentials: 'include', // 包含 Cookies
});

10. request.stream

  • 功能: 逐步读取请求体数据(io.BytesIO 对象)。
  • 适用场景: 处理大文件或流式数据。

Flask 后端:

python 复制代码
@app.route('/stream', methods=['POST'])
def process_stream():
    raw_data = b""
    for chunk in request.stream:
        raw_data += chunk
    return f"Received {len(raw_data)} bytes"

前端 fetch 示例:

javascript 复制代码
const data = new Uint8Array(1024 * 1024); // 模拟 1MB 数据
fetch('/stream', {
    method: 'POST',
    body: data,
});

总结表:

方法 功能 常见 fetch Headers 和 Body
get_data() 获取原始请求体(bytes body: binaryData
get_json() 获取 JSON 数据并解析为字典 headers: {'Content-Type': 'application/json'}, body: JSON
form 获取表单数据 headers: {'Content-Type': 'application/x-www-form-urlencoded'}
args 获取查询字符串参数 URL?key=value
files 获取上传文件对象 body: formData
json 获取 JSON 数据 get_json()
values 获取表单和查询参数的组合 混合 GET/POST 请求
headers 获取请求头 headers: {'Custom-Header': 'value'}
cookies 获取客户端 Cookie credentials: 'include'
stream 流式读取请求体 body: largeData
相关推荐
neeef_se21 分钟前
前端速通(CSS)
前端·css
陈大爷(有低保)33 分钟前
LayUI结合SSM框架
前端·javascript·layui
niew~36 分钟前
用uni-app写的开灯、关灯的面板界面
前端·javascript·uni-app
柠檬豆腐脑1 小时前
跨语言集成:将 Python 的强大功能带入 Nodejs 应用
前端·python·node.js
m0_748234341 小时前
【SpringMVC】基于 Spring 的 Web 层MVC 框架
前端·spring·mvc
阿福的工作室1 小时前
react跳转传参的方法
前端·react.js·前端框架
远洋录1 小时前
大型前端应用状态管理实战:从 Redux 到 React Query 的演进之路
前端·人工智能·react
liuweni1 小时前
Next.js系统性教学:深入理解缓存交互与API缓存管理
开发语言·前端·javascript·经验分享·缓存·前端框架·交互
m0_748240252 小时前
前端编程艺术(5)---Vue3(从零基础到项目开发)
前端
m0_748257462 小时前
使用Element UI实现前端分页,前端搜索,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量
前端·ui·状态模式