Flask Web 应用
本章带你从零开始,用 Flask 创建第一个 Web 应用,理解微框架的设计哲学。
Flask 与 Django 的定位差异
Django 是「大而全」的全栈框架,自带 ORM、模板引擎、管理后台、用户认证、表单处理等。
Flask 是微框架——核心极简,只提供路由和模板渲染,其他功能通过扩展按需添加。
| 特性 | Django | Flask |
|---|---|---|
| 设计哲学 | 开箱即用(电池全包) | 微框架,按需扩展 |
| ORM | 内置 Django ORM | Flask-SQLAlchemy(扩展) |
| 数据库迁移 | 内置 makemigrations/migrate | Flask-Migrate(扩展) |
| 用户认证 | 内置 auth 模块 | Flask-Login(扩展) |
| 后台管理 | 内置 Django Admin | Flask-Admin(扩展) |
| 模板引擎 | Django Templates | Jinja2(语法几乎一样) |
| 路由配置 | urls.py 集中配置 | 装饰器就近声明 |
选择建议:新手快速出成果用 Django,喜欢自己掌控、按需组装的用 Flask。
环境准备
确认 Python 版本(需要 3.8 以上):
$ python3 --version Python 3.12.0
创建虚拟环境并安装 Flask
$ python3 -m venv venv $ source venv/bin/activate # Windows:venv\Scripts\activate (venv) $ pip install flask
验证安装:
(venv) $ python -c "import flask; print(flask.__version__)" 3.1.0
Flask 最小应用
一个 Flask 应用只需要一个 Python 文件。
实例
# 文件路径:app.py
from flask import Flask
# 创建 Flask 应用实例
# __name__ 告诉 Flask 当前模块的位置(用于查找模板和静态文件)
app = Flask(__name__)
# @app.route("/") — 路由装饰器:访问 / 路径时执行下面的函数
@app.route("/")
def index():
return '<h1>欢迎来到 RUNOOB 博客</h1>'
# 如果直接运行 python app.py(而非 flask run),启动开发服务器
if __name__ == '__main__':
app.run(debug=True)
from flask import Flask
# 创建 Flask 应用实例
# __name__ 告诉 Flask 当前模块的位置(用于查找模板和静态文件)
app = Flask(__name__)
# @app.route("/") — 路由装饰器:访问 / 路径时执行下面的函数
@app.route("/")
def index():
return '<h1>欢迎来到 RUNOOB 博客</h1>'
# 如果直接运行 python app.py(而非 flask run),启动开发服务器
if __name__ == '__main__':
app.run(debug=True)
启动开发服务器
(venv) $ flask run * Running on http://127.0.0.1:5000
浏览器访问 http://127.0.0.1:5000/,看到页面内容。
开启热重载(修改代码后自动重启服务器):
(venv) $ flask run --debug
flask run默认查找app.py中的app实例。如果文件名或实例名不同,需要设置环境变量:FLASK_APP=myapp.py(文件名)、FLASK_APP=myapp:create_app()(工厂函数)。
Flask 命令行工具
除了 flask run,Flask 还提供了其他有用的命令。
| 命令 | 作用 |
|---|---|
| flask run | 启动开发服务器 |
| flask run --debug | 启动服务器 + 热重载 + 调试模式 |
| flask routes | 列出所有已注册的路由 |
| flask shell | 进入交互式 Shell(自动导入 app 实例) |
项目目录结构规划
虽然 Flask 支持单文件应用,但真实项目需要清晰的目录组织。
blog_project/ ├── app/ │ ├── __init__.py # 应用工厂 create_app()(第十章引入) │ ├── blueprints/ # 路由 Blueprint(第四章分离) │ ├── templates/ # Jinja2 模板(第二章创建) │ ├── static/ # 静态文件 CSS/JS/图片 │ ├── models.py # SQLAlchemy 模型(第三章创建) │ └── forms.py # Flask-WTF 表单(第八章创建) ├── config.py # 配置文件 ├── app.py # 应用入口(第一章从这里开始) └── .env # 环境变量
动手:博客首页路由
创建项目骨架,配置首页路由,让浏览器显示欢迎信息。
实例
# 文件路径:app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
"""博客首页"""
return """
<h1>欢迎来到 RUNOOB 博客</h1>
<p>这是一个用 Flask 构建的个人博客展示站。</p>
<p>更多内容即将上线,敬请期待。</p>
"""
@app.route("/about")
def about():
"""关于页面"""
return '<h1>关于本站</h1><p>记录前端与后端的学习笔记。</p>'
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
"""博客首页"""
return """
<h1>欢迎来到 RUNOOB 博客</h1>
<p>这是一个用 Flask 构建的个人博客展示站。</p>
<p>更多内容即将上线,敬请期待。</p>
"""
@app.route("/about")
def about():
"""关于页面"""
return '<h1>关于本站</h1><p>记录前端与后端的学习笔记。</p>'
运行:
flask run
访问首页和关于页面,确认路由正常工作。
本章小结
本章你完成了三件事:创建虚拟环境并安装 Flask、理解了 Flask 微框架与 Django 大而全的定位差异、编写了第一个路由页面。
核心收获:Flask 最小应用只需要 Flask(__name__) + @app.route() 装饰器,用 flask run 启动。
