flask路由和fastapi的路由的差异
flask路有系统demo
这里为你提供一份包含 Flask(现代 2.x/3.x 规范)最核心场景的路由系统 Demo。
与 FastAPI 的
APIRouter 类似,Flask 推荐使用 蓝图(Blueprint) 来进行路由的模块化拆分,而不是全部写在 app.py 中。📂 1. 创建子路由模块(使用蓝图
blueprints/user.py)这个片段展示了 Flask 路由系统中最核心的 4 种传参场景:路径参数、查询参数(GET)、JSON数据(POST) 以及传统的 HTML 表单/文件上传。
python
from flask import Blueprint, request, jsonify
# 💡 1. 创建一个蓝图对象,相当于 FastAPI 的 APIRouter
# 参数依次为:蓝图名称、导入名、URL统一前缀
user_bp = Blueprint('user', __name__, url_prefix='/users')
# 🚀 场景 A: GET 请求 + 路径参数(指定类型)
# 💡 示例 URL: GET http://127.0.0
@user_bp.route('/<int:user_id>', methods=['GET'])
def get_user(user_id):
# 如果用户不存在,可以返回状态码
if user_id != 1:
return jsonify({"error": "User not found"}), 404
return jsonify({"id": user_id, "username": "maliang", "role": "admin"})
# 🚀 场景 B: GET 请求 + URL 查询参数(问号后面的参数)
# 💡 示例 URL: GET http://127.0.0
@user_bp.route('', methods=['GET'])
def list_users():
# 使用 request.args 获取问号后面的参数,并可设置默认值与强制类型转换
page = request.args.get('page', default=1, type=int)
size = request.args.get('size', default=10, type=int)
return jsonify({
"page": page,
"size": size,
"data": [{"id": 1, "username": "maliang"}]
})
# 🚀 场景 C: POST 请求 + 接收前端 JSON 数据
# 💡 示例: POST http://127.0.0
@user_bp.route('', methods=['POST'])
def create_user():
# 使用 request.get_json() 获取前端传来的 JSON 字典
# silent=True 可以在前端没传 JSON 时返回 None 而不是直接报错崩溃
data = request.get_json(silent=True) or {}
username = data.get('username')
age = data.get('age')
if not username:
return jsonify({"error": "用户名不能为空"}), 400
return jsonify({"status": "created", "username": username, "age": age}), 201
# 🚀 场景 D: POST 请求 + 接收传统 HTML 表单与文件上传
@user_bp.route('/upload-avatar', methods=['POST'])
def upload_avatar():
# request.form 获取表单中的普通文本字段