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