本节摘要:Flask 是 Python 最流行的轻量级 Web 框架,核心理念是"最小核心 + 按需扩展"。本节讲清 Flask 的定位、与 Django 的差异、安装方法,以及如何用十行代码跑起第一个应用。
阅读完本节,你应当能够:
先做个思想实验:没有框架,怎么用 Python 处理一个 HTTP 请求?你需要手动解析请求行、请求头、请求体,自己匹配 URL、调用对应处理函数,再手动拼 HTTP 响应。这些工作繁琐且易错,而且每个项目都要重写一遍。
Web 框架就是把这些"通用工作"抽出来:路由分发、请求解析、响应构造、模板渲染——你只管写业务逻辑。Flask 正是这种理念的极致体现:核心极简(一个路由装饰器加一个应用对象),其余能力(数据库、认证、表单)通过扩展按需加载。
💡 关键直觉:Flask 是"微框架",不是"弱框架"。"微"指的是核心小巧,不是能力受限——它通过扩展生态几乎能做任何事,只是把"用什么"的决定权交给你。
| 维度 | Flask | Django |
|---|---|---|
| 设计理念 | 微框架,按需扩展 | 全家桶,装好即用 |
| 核心 | 路由+WSGI | 路由+ORM+Admin+Auth |
| 学习曲线 | 平缓 | 陡峭 |
| 灵活性 | 高(自由组合) | 低(按既定模式) |
| 适合 | 原型、小中项目、API | 大型项目、快速起盘 |
| 生态 | 靠扩展 | 内置完整 |
选择逻辑:想要"小而美、自己掌控"选 Flask;想要"装好即用、少操心"选 Django。Flask 也是学习 Web 原理的更好起点——因为框架替你做的少,你更容易理解底层发生了什么。
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "Hello, Flask!" if __name__ == '__main__': app.run(debug=True)
这十行代码就是一个完整应用:Flask(__name__) 创建应用对象,@app.route 注册路由,视图函数返回响应,app.run 启动开发服务器。
pip install flask
建议在虚拟环境中安装(避免污染全局环境):
python -m venv venv # Windows: venv\Scripts\activate # macOS/Linux: source venv/bin/activate pip install flask
import flask print(flask.__version__)
把上面的代码保存为 app.py,运行:
python app.py
访问 `「相关地址请参见官方文档」 "Hello, Flask!" 即成功。
⚠️ 常见坑:
debug=True只在开发环境用。debug 模式会在代码变更时自动重载、出错时显示调试页面——生产环境必须关闭(否则泄露源码与敏感信息)。
💡 关键直觉:
app.run()是开发专用。生产环境用 Gunicorn/uWSGI 等 WSGI 服务器(见第二章部署),app.run只适合本地开发。
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "欢迎来到 Flask 世界!" @app.route('/about') def about(): return "关于我们" if __name__ == '__main__': app.run(debug=True)
启动后访问两个 URL,你会看到不同页面。这验证了"URL → 视图函数"的映射——Flask 的核心工作方式。试试改一下返回文字,保存后页面自动更新(debug 模式的热重载)。
虽然第一章是"小文件起步",但先了解标准结构有好处:
myapp/ ├── app.py # 应用入口(第一章先用单文件) ├── templates/ # 模板目录(1.4 使用) ├── static/ # 静态文件(CSS/JS/图片) ├── requirements.txt # 依赖清单 └── venv/ # 虚拟环境
单文件适合学习与小项目;真实项目用蓝图模块化(第二章)。
问:Flask 是最流行的 Python Web 框架吗?
在"轻量级"分类里是;整体上与 Django 并列前二。Flask 因灵活性和学习友好度,特别受 API 开发和创业团队欢迎。
问:Flask 支持异步吗?
原生支持有限(Flask 2.0+ 支持 async 视图,但受限);大规模异步场景通常选 Quart(Flask 的异步版本)或 FastAPI。
问:Flask 能做大项目吗?
能。不少大型项目用 Flask + 蓝图 + 扩展构建,关键是架构(见第四章)。Flask 不限制规模,限制的是"没有良好架构的代码"。
问:学 Flask 需要先学 Django 吗?
不需要。两者平行,甚至先学 Flask 更容易理解 Web 原理(因为框架替你做的少)。
真正的项目不会"裸装"依赖,而是用虚拟环境隔离每个项目的 Python 包——不同项目用不同版本的 Flask,互不干扰。
# 创建虚拟环境(项目目录内) python -m venv venv # 激活 # Windows: venv\\Scripts\\activate # macOS / Linux: source venv/bin/activate # 安装依赖 pip install flask # 导出依赖清单(项目必备,供他人复现环境) pip freeze > requirements.txt
别人拿到项目后一条命令复现环境:
pip install -r requirements.txt
为什么必须这样做:直接全局安装 Flask,多个项目版本冲突时互相覆盖,且系统环境被污染。虚拟环境让每个项目"自成一间房"。
requirements.txt 是什么:一份依赖清单,每一行是一个包名(含版本号),如 flask==3.0.0。它让"换台电脑、换个同事、换台服务器"都能装出一模一样的环境——这是可复现性的基础。
现代编辑器都能自动识别并激活项目的虚拟环境:
venv 里的解释器即可;编辑器识别虚拟环境后,运行、调试、代码补全都会使用正确环境——新手最常见的"代码里 import flask 报错,但命令行能跑"就是解释器选错了。
pip install flask 默认装最新稳定版(写作本书时为 3.x);教材基于 Flask 3.x,与 2.x 的差异(如 app.get/app.post 快捷方法、before_request 行为)会在书中标注;每次开始学习前,先确认环境没问题:
python --version # 1. Python 版本 >= 3.10 pip show flask # 2. Flask 已安装(显示版本信息) python -c "import flask; print(flask.__version__)" # 3. 能 import
三条全通过,环境就绪。任何一条失败,按对应提示处理:没装 Flask 就 pip install flask;import 失败多半是解释器不在虚拟环境里。
| 现象 | 原因 | 解法 |
|---|---|---|
ModuleNotFoundError: No module named 'flask' |
没装或装错环境 | 激活虚拟环境后 pip install flask |
Address already in use |
5000 端口被占 | 换端口:app.run(port=5001) 或关掉占用程序 |
| 终端能跑、编辑器报错 | 编辑器选了别的解释器 | 切换解释器到项目 venv |
pip 不是内部或外部命令 |
Python 未加入 PATH | 重装 Python 时勾选 "Add to PATH" |
| 安装很慢/超时 | 网络问题 | 用国内镜像:`pip install flask -i 「相关地址请参见官方文档」 |
环境问题占据了新手 80% 的报错——先把环境跑通,后面才谈得上写代码。
把环境跑通后,你的 Flask 学习路径可以这样规划:
第一周:打通闭环。 完成 1.2 到 1.4,做出一个能显示动态内容的页面——输入一个名字,页面根据名字返回不同问候。这个"输入→处理→输出"的闭环,就是 Web 应用的全部核心。
第二周:加上交互。 完成 1.5 表单,让用户能提交数据;再做 1.6,理解一次请求怎么走完。此时你已具备"做一个能收数据、能存数据(暂时存内存)、能展示"的小应用的能力。
第三周起:进入进阶。 学习第二章的会话与蓝图,把应用结构化。你会发现,有了第一章的地基,第二章的概念理解起来非常快——这就是地基的价值。
一个完整小项目的画面感:想象你要做一个"待办清单"应用——1.2 路由定义 / 与 /add;1.3 用 request.form 取新待办;1.4 用模板循环渲染清单;1.5 用表单提交;1.6 理解每次提交都是一次完整请求。第一章学完,这个应用你已经能写出来了——只是数据重启会丢(第三章用数据库解决)。这就是"学完第一章能做什么"的直观答案。
关于开发工具:学习阶段用 VS Code 或 PyCharm 都行,重点是开启代码补全与调试。Flask 的调试模式(app.run(debug=True))会在代码修改后自动重载——改完代码刷新浏览器就能看到效果,这是开发期最常用的工作流。记住:debug 模式只用于开发,生产环境必须关闭(第二章部署章节详述)。
环境隔离的价值再强调一次:不同项目用不同虚拟环境,是"电脑上同时维护多个项目"的前提。养成每个项目都建 venv 的习惯,后面会感谢自己。