Flask中获取请求参数的一些方式总结
在 Flask 中,可以从 request
对象中获取各种类型的参数。以下是全面整理的获取参数的方式及示例代码。
1. 获取 URL 查询参数(Query String Parameters)
URL 中的查询参数通过 ?key=value&key2=value2
的形式传递,使用 request.args
获取。
示例:
from flask import Flask, request
app = Flask(__name__)
@app.route('/query')
def get_query_params():
param1 = request.args.get('param1', default=None, type=str) # 获取单个参数
param2 = request.args.getlist('param2') # 获取多个同名参数
return f"param1: {param1}, param2: {param2}"
# 测试 URL: http://127.0.0.1:5000/query?param1=value1¶m2=value2¶m2=value3
2. 获取表单数据(Form Data)
当请求方法为 POST
或 PUT
时,可以通过 request.form
获取表单数据。
示例:
@app.route('/form', methods=['POST'])
def get_form_data():
name = request.form.get('name', default=None, type=str) # 获取单个参数
age = request.form.get('age', default=0, type=int) # 获取并转换为整数
return f"name: {name}, age: {age}"
# 测试:使用 Postman 或 curl 提交表单数据
3. 获取 JSON 数据
当客户端发送 JSON 格式的数据时,可以使用 request.json
获取解析后的字典。
示例:
@app.route('/json', methods=['POST'])
def get_json_data():
data = request.json # 获取 JSON 数据
name = data.get('name', None)
age = data.get('age', 0)
return f"name: {name}, age: {age}"
# 测试:使用 Postman 或 curl 提交 JSON 数据
# 请求头:Content-Type: application/json
# 请求体:{"name": "Alice", "age": 25}
4. 获取文件上传(File Uploads)
当上传文件时,可以通过 request.files
获取文件对象。
示例:
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files.get('file') # 获取上传的文件
if file:
filename = file.filename
file.save(f"./{filename}") # 保存文件到本地
return f"File uploaded: {filename}"
return "No file uploaded"
# 测试:使用 Postman 或 curl 提交文件
5. 获取路径参数(Route Parameters)
路径参数是通过 URL 路径定义的动态部分,使用 <variable_name>
定义,并在函数中接收。
示例:
@app.route('/user/<username>')
def get_user(username):
return f"Hello, {username}!"
# 测试 URL: http://127.0.0.1:5000/user/Alice
6. 获取原始请求体(Raw Body)
如果需要直接获取请求的原始内容,可以使用 request.data
或 request.get_data()
。
示例:
@app.route('/raw', methods=['POST'])
def get_raw_data():
raw_data = request.data.decode('utf-8') # 获取并解码原始数据
return f"Received raw data: {raw_data}"
# 测试:提交任意格式的原始数据
7. 获取 Headers
通过 request.headers
获取请求头信息。
示例:
@app.route('/headers')
def get_headers():
user_agent = request.headers.get('User-Agent') # 获取 User-Agent
host = request.headers.get('Host') # 获取 Host
return f"User-Agent: {user_agent}, Host: {host}"
# 测试:访问任意 URL
8. 获取 Cookies
通过 request.cookies
获取客户端发送的 Cookie。
示例:
@app.route('/cookies')
def get_cookies():
session_id = request.cookies.get('session_id', default=None) # 获取 Cookie
return f"Session ID: {session_id}"
# 测试:设置 Cookie 并访问
9. 获取 Method 类型
通过 request.method
获取当前请求的方法类型(如 GET
, POST
等)。
示例:
@app.route('/method', methods=['GET', 'POST'])
def get_method():
return f"Request method: {request.method}"
# 测试:分别用 GET 和 POST 方法访问
10. 获取完整的 URL
通过 request.url
获取完整的请求 URL。
示例:
@app.route('/url')
def get_full_url():
return f"Full URL: {request.url}"
# 测试:访问任意 URL
总结
方式 | 使用场景 | 属性/方法 |
---|---|---|
查询参数 | URL 中的键值对 | request.args |
表单数据 | HTML 表单提交 | request.form |
JSON 数据 | 客户端发送 JSON 格式数据 | request.json |
文件上传 | 文件上传 | request.files |
路径参数 | 动态路由中的参数 | 函数参数 |
原始请求体 | 获取未解析的请求体 | request.data |
Headers | 获取请求头信息 | request.headers |
Cookies | 获取客户端发送的 Cookie | request.cookies |
Method 类型 | 获取请求方法类型 | request.method |
完整 URL | 获取完整的请求 URL | request.url |
以上方法涵盖了 Flask 中从 request
对象获取参数的主要方式,根据实际需求选择合适的方式即可。