617 Flask 轻量 Web 开发
一句话概述:Flask 是 Python 的微型 Web 框架,核心极简只有路由和模板,其余功能按需添加,适合小项目和快速原型,是"Web 开发的瑞士军刀"。
核心知识点速查表
| 知识点 | 说明 |
|---|
| 最新版本 | Flask 3.1.x(2026年) |
| 核心依赖 | Werkzeug(HTTP工具)+ Jinja2(模板引擎) |
| 设计理念 | 微框架,不强制任何工具选择 |
| WSGI | 基于 WSGI,不原生支持 async |
| 适用场景 | 小型 API、原型开发、微服务、教学 |
一、安装与基本使用
pip install flask # 安装 Flask
# app.py - 最简 Flask 应用
from flask import Flask, jsonify, request # 导入核心组件
app = Flask(__name__) # 创建应用(__name__ 用于定位资源)
@app.route('/') # 路由装饰器
def hello():
return 'Hello, Flask!' # 返回文本响应
@app.route('/api/users', methods=['GET'])
def get_users():
users = [{'id': 1, 'name': '张三'}, {'id': 2, 'name': '李四'}]
return jsonify(users) # 返回 JSON
@app.route('/api/users', methods=['POST'])
def create_user():
data = request.get_json() # 获取请求体 JSON
if not data or 'name' not in data:
return jsonify({'error': '缺少 name 字段'}), 400 # 400 错误
return jsonify({'id': 3, 'name': data['name']}), 201 # 201 已创建
@app.route('/api/users/<int:user_id>') # 路径参数(自动转 int)
def get_user(user_id):
return jsonify({'id': user_id, 'name': f'用户{user_id}'})
if __name__ == '__main__':
app.run(debug=True, port=5000) # debug 模式自动重载
# 运行
flask run --debug # 推荐方式
# 或
python app.py # 直接运行
二、实用功能
2.1 蓝图(模块化)
# blueprints/auth.py
from flask import Blueprint, jsonify
auth_bp = Blueprint('auth', __name__, url_prefix='/auth') # 创建蓝图
@auth_bp.route('/login', methods=['POST'])
def login():
return jsonify({'token': 'xxx'})
# app.py 中注册
from blueprints.auth import auth_bp
app.register_blueprint(auth_bp) # 注册蓝图
2.2 错误处理
@app.errorhandler(404)
def not_found(error):
return jsonify({'error': '资源不存在'}), 404
@app.errorhandler(500)
def internal_error(error):
return jsonify({'error': '服务器内部错误'}), 500
2.3 数据库(SQLAlchemy)
# pip install flask-sqlalchemy
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), unique=True)
# 创建表
with app.app_context():
db.create_all()
三、常见报错与解决
| 问题 | 解决方案 |
|---|
| 404 Not Found | 检查路由定义和 URL 是否匹配 |
| CORS 错误 | pip install flask-cors,CORS(app) |
| 循环导入 | 使用工厂函数模式 create_app() |
四、速查表
| 操作 | 代码 |
|---|
| 运行 | flask run --debug |
| GET路由 | @app.route('/path') |
| POST路由 | @app.route('/path', methods=['POST']) |
| 获取JSON | request.get_json() |
| 返回JSON | jsonify(data) |
| 查询参数 | request.args.get('key') |
| 路径参数 | @app.route('/<int:id>') |
| 重定向 | redirect(url_for('func')) |
五、同类工具对比
| 特性 | Flask | FastAPI | Django | Bottle |
|---|
| 复杂度 | 极低 | 低 | 中 | 极低 |
| 异步 | 不原生 | 原生 | 3.1+ | 不支持 |
| ORM | 插件 | 无 | 内置 | 无 |
| 文档生成 | 插件 | 自动 | DRF | 无 |
| 适合场景 | 小项目 | API | 全栈 | 微型 |
选型建议:快速原型/小型项目选 Flask;API 密集型选 FastAPI;全栈选 Django。
参考资料:Flask 官方文档 | GitHub