Flask简介 #

一、什么是Flask #

Flask是一个用Python编写的轻量级Web应用框架。它被称为"微框架",因为它保持核心简单,但可以轻松扩展。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。

1.1 Flask的核心组件 #

text
Flask应用
    ├── Werkzeug(WSGI工具包)
    │   ├── 路由系统
    │   ├── 请求/响应对象
    │   └── 开发服务器
    ├── Jinja2(模板引擎)
    │   ├── 模板渲染
    │   ├── 模板继承
    │   └── 过滤器
    └── 扩展系统
        ├── Flask-SQLAlchemy
        ├── Flask-Login
        └── 更多扩展...

1.2 微框架的含义 #

"微"并不意味着整个Web应用只能放在一个Python文件中,也不意味着Flask功能简陋。它的含义是:

特点 说明
核心简洁 只包含基本功能,无冗余
可扩展 按需添加功能,灵活组合
无依赖 不依赖特定的数据库或ORM
自由度高 不强制项目结构或编码规范

二、Flask发展历史 #

2.1 发展时间线 #

年份 事件
2010 Armin Ronacher创建Flask,作为愚人节玩笑发布
2010 Flask正式发布0.1版本
2013 发布1.0版本,API趋于稳定
2018 发布1.0正式版,大量改进
2023 发布3.0版本,支持Python 3.8+

2.2 Flask的诞生 #

Flask最初是Armin Ronacher的一个愚人节玩笑项目,但因其设计理念优秀,迅速获得了社区的认可和广泛使用。

python
# Flask的设计哲学
# "Simple things should be simple, complex things should be possible"
# 简单的事情应该简单,复杂的事情应该可行

三、Flask的核心特点 #

3.1 优点 #

1. 轻量级

python
# 最简单的Flask应用只需要几行代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, Flask!'

if __name__ == '__main__':
    app.run()

2. 灵活性

python
# Flask不强制项目结构
# 可以是单文件
# 也可以是复杂的模块化结构

# 单文件结构
# app.py

# 模块化结构
# myapp/
# ├── __init__.py
# ├── models.py
# ├── views.py
# ├── templates/
# └── static/

3. 易于学习

python
# 路由使用装饰器,直观易懂
@app.route('/user/<username>')
def show_user(username):
    return f'User: {username}'

# 模板渲染简单明了
from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    return render_template('hello.html', name=name)

4. 扩展丰富

python
# 按需添加扩展
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_mail import Mail

db = SQLAlchemy(app)
login_manager = LoginManager(app)
mail = Mail(app)

3.2 适用场景 #

场景 说明
小型Web应用 个人项目、原型开发
RESTful API 后端API服务
微服务 轻量级服务组件
学习Web开发 理解Web框架原理
中型应用 配合扩展可构建复杂应用

四、Flask与其他框架对比 #

4.1 与Django对比 #

特性 Flask Django
类型 微框架 全栈框架
学习曲线 平缓 较陡
灵活性
内置功能 丰富
项目结构 自由 固定
ORM 可选 内置
Admin后台 内置
适用项目 小型到中型 中型到大型

4.2 与FastAPI对比 #

特性 Flask FastAPI
性能 中等
异步支持 有限 原生支持
类型提示 强类型
API文档 需扩展 自动生成
学习曲线 平缓 中等
生态成熟度 成熟 发展中

4.3 选择建议 #

选择Flask:

  • 需要灵活性和控制力
  • 项目规模中小型
  • 学习Web开发
  • 需要定制化组件
  • 快速原型开发

选择Django:

  • 需要快速开发完整应用
  • 项目规模中大型
  • 需要Admin后台
  • 团队协作开发
  • 需要内置解决方案

选择FastAPI:

  • 高性能API服务
  • 需要异步支持
  • 需要自动API文档
  • 现代Python项目

五、Flask核心概念 #

5.1 应用对象 #

python
from flask import Flask

# 创建Flask应用实例
app = Flask(__name__)

# __name__ 用于确定应用的根目录
# 这样Flask可以找到模板和静态文件

5.2 路由 #

python
# 路由将URL映射到Python函数
@app.route('/')
def index():
    return '首页'

@app.route('/about')
def about():
    return '关于页面'

# 动态URL
@app.route('/user/<username>')
def user_profile(username):
    return f'用户: {username}'

5.3 请求与响应 #

python
from flask import request, jsonify

@app.route('/api/data', methods=['POST'])
def api_data():
    # 获取请求数据
    data = request.get_json()
    
    # 返回JSON响应
    return jsonify({
        'status': 'success',
        'data': data
    })

5.4 模板渲染 #

python
from flask import render_template

@app.route('/hello/<name>')
def hello(name):
    # 渲染模板并传递变量
    return render_template('hello.html', name=name)

5.5 蓝图 #

python
from flask import Blueprint

# 创建蓝图,用于组织代码
auth = Blueprint('auth', __name__)

@auth.route('/login')
def login():
    return '登录页面'

# 在应用中注册蓝图
app.register_blueprint(auth, url_prefix='/auth')

六、Flask生态系统 #

6.1 核心扩展 #

扩展 功能
Flask-SQLAlchemy 数据库ORM
Flask-Migrate 数据库迁移
Flask-Login 用户会话管理
Flask-WTF 表单处理
Flask-Mail 邮件发送
Flask-RESTful REST API构建
Flask-Caching 缓存支持
Flask-Admin 管理界面

6.2 扩展安装模式 #

bash
# 基本安装
pip install flask-sqlalchemy

# 开发环境安装
pip install flask-sqlalchemy flask-migrate flask-wtf

# 生产环境安装
pip install gunicorn flask-sqlalchemy flask-login

七、Flask应用场景实例 #

7.1 个人博客 #

python
# 简单的博客路由
@app.route('/posts')
def posts():
    posts = Post.query.all()
    return render_template('posts.html', posts=posts)

@app.route('/post/<int:id>')
def post(id):
    post = Post.query.get_or_404(id)
    return render_template('post.html', post=post)

7.2 RESTful API #

python
# API端点
@app.route('/api/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([u.to_dict() for u in users])

@app.route('/api/users', methods=['POST'])
def create_user():
    data = request.get_json()
    user = User(**data)
    db.session.add(user)
    db.session.commit()
    return jsonify(user.to_dict()), 201

7.3 微服务 #

python
# 用户服务
@app.route('/users/<int:user_id>')
def get_user(user_id):
    # 调用其他服务或数据库
    user = user_service.get(user_id)
    return jsonify(user)

八、总结 #

8.1 核心要点 #

要点 说明
定义 轻量级Python Web框架
核心组件 Werkzeug + Jinja2
特点 轻量、灵活、易学、可扩展
适用场景 小型到中型Web应用、API、微服务

8.2 下一步 #

现在你已经了解了Flask的基本概念,接下来让我们学习 安装与配置,搭建你的Flask开发环境!

最后更新:2026-03-28