跳转至

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-corsCORS(app)
循环导入使用工厂函数模式 create_app()

四、速查表

操作代码
运行flask run --debug
GET路由@app.route('/path')
POST路由@app.route('/path', methods=['POST'])
获取JSONrequest.get_json()
返回JSONjsonify(data)
查询参数request.args.get('key')
路径参数@app.route('/<int:id>')
重定向redirect(url_for('func'))

五、同类工具对比

特性FlaskFastAPIDjangoBottle
复杂度极低极低
异步不原生原生3.1+不支持
ORM插件内置
文档生成插件自动DRF
适合场景小项目API全栈微型

选型建议:快速原型/小型项目选 Flask;API 密集型选 FastAPI;全栈选 Django。


参考资料Flask 官方文档 | GitHub