跳到主要内容

简介与安装

简介

Flask 是一个轻量级的 Python Web 框架,基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。Flask 被称为"微框架",因为它只保留构建 Web 应用所必需的核心组件,而将其他功能(如数据库集成、表单验证等)留给开发者选择和扩展。

本笔记基于 Flask 3.1.3(Python 3.13)整理。

特点

  • 轻量级: Flask 核心简单,易于学习和使用。
  • 灵活: 开发者可以根据自己的需求选择和集成各种扩展。
  • 可扩展性强: Flask 提供了丰富的扩展库,可以方便地添加各种功能。
  • 路由灵活: Flask 支持多种 URL 路由方式,可以轻松定义复杂的路由规则。
  • 模板引擎: Flask 集成了 Jinja2 模板引擎,可以方便地生成动态 HTML 页面。
  • WSGI 支持: Flask 基于 Werkzeug WSGI 工具箱,可以部署在各种 WSGI 服务器上。

技能图谱

安装

  • 建议 Python 版本不低于 3.9(本笔记基于 3.13)。
  • 建议使用虚拟环境安装 Flask。
# 创建并激活虚拟环境
python3 -m venv study-flask
source study-flask/bin/activate

# 安装当前稳定版 Flask
python3 -m pip install flask

HelloWorld

  • 代码文件:demo.py
from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
return "<h1>Hello, World!</h1>"


if __name__ == "__main__":
app.run(host="127.0.0.1", port=8080, debug=True)

运行:

python demo.py

测试:浏览器访问 http://127.0.0.1:8080

也可以使用命令行方式启动(推荐,支持自动重载):

flask --app demo run --host 127.0.0.1 --port 8080 --debug

debug 模式

在启动参数中指定 debug=True 开启 debug 模式:代码变动时自动重新加载,报错会在浏览器显示。生产环境务必关闭。

注意

Flask 2.3 起已移除 FLASK_ENV 环境变量,旧写法 export FLASK_ENV="production" 不再生效;生产模式通过 export FLASK_DEBUG=0 控制。

使用 url_for 获取路由

url_for() 接收视图函数名作为第一个参数,其余参数作为 URL 变量或查询字符串:

from flask import Flask, url_for

app = Flask(__name__)


@app.route("/")
def index():
return "index"


@app.route("/login")
def login():
return "login"


@app.route("/user/<username>")
def profile(username):
return f"{username}'s profile"


with app.test_request_context():
print(url_for("index")) # /
print(url_for("login")) # /login
print(url_for("login", next="/")) # /login?next=/
print(url_for("profile", username="John Doe")) # /user/John%20Doe

静态文件

在程序运行目录创建 static 目录即可,Flask 会自动提供 /static 路由:

项目目录/
├── app.py
└── static/
└── style.css

模板中引用:

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

重定向和抛出异常

from flask import abort, redirect, url_for


@app.route("/")
def index():
return redirect(url_for("login"))


@app.route("/login")
def login():
abort(401)

日志

Flask 内置 app.logger(标准库 logging 的封装):

app.logger.debug("A value for debugging")
app.logger.warning("A warning occurred (%d apples)", 42)
app.logger.error("An error occurred")

自定义 JSON 日志与访问日志见 实现基本功能

参考