入门Flask(二)
使用UV管理虚拟环境和依赖
虚拟环境是独立于 Python 全局环境的 Python 解释器环境,使用它的好处如下:
- 保持全局环境的干净
- 为同一个库在不同环境下指定不同的版本
- 方便记录和管理某个项目相关的依赖
uv是一个使用 Rust 编写的 Python 依赖和虚拟环境管理工具。
- 首先安装 uv。
curl -LsSf https://astral.sh/uv/install.sh | sh或者
$ pip install --user uv - 使用 uv venv 命令创建虚拟环境:
uv venv激活虚拟环境
source .venv/bin/activate - 使用 uv pip 命令安装依赖:
uv pip install flask
依赖导出 - 依赖还原
- pip freeze > requirements.txt:把当前环境的依赖包(含精确版本)导出到文本文件;
- pip install -r requirements.txt:从文本文件批量安装指定版本的依赖包;
核心价值:解决 “本地跑的好好的,换个电脑 / 服务器就报错” 的依赖版本不一致问题。
❗ 必须在虚拟环境中执行:如果直接在全局 Python 环境执行,会导出所有全局安装的包(比如你之前装的 numpy、pandas 等无关包),导致文件冗余;
安装的依赖包:
blinker==1.9.0
click==8.3.1
flask==3.1.2
itsdangerous==2.2.0
jinja2==3.1.6
markupsafe==3.0.3
werkzeug==3.1.5
依赖包功能介绍:
- flask(核心框架本身):Flask 的主包,是整个微框架的 “总控中心”。它整合了下面所有依赖的能力,对外提供简洁易用的 API(比如@app.route()路由装饰器、request请求对象、render_template模板渲染、session会话管理等)。
- werkzeug(WSGI 核心工具集):Flask 的 “底层基石”,是遵循 WSGI 规范的 Python Web 工具集,Flask 几乎所有底层的 HTTP 处理逻辑都基于 Werkzeug 实现。
- jinja2(WSGI 核心工具集):Flask 的 “页面渲染引擎”,负责把动态数据和 HTML 模板结合,生成最终返回给浏览器的 HTML 页面。
- markupsafe(模板安全工具):Jinja2 的依赖包,是 Flask 模板渲染的 “安全卫士”,主要解决XSS 跨站脚本攻击问题。
- click(命令行工具库):Flask 的 “命令行管家”,Flask 的所有命令行功能(比如flask run、flask shell)都是基于 Click 实现的。
- itsdangerous(安全序列化工具):Flask 的 “数据加密签名工具”,主要用于处理敏感数据的安全传输 / 存储,比如 Flask 的session会话数据。
- blinker(信号机制库):Flask 的 “事件通知器”,实现了 “发布 - 订阅” 模式,让 Flask 能在特定事件发生时触发自定义逻辑。非 Flask 核心必需,但 Flask 2.0 + 后默认依赖它来提供信号功能。
依赖关系:

默认配置约定(约定优于配置)
Flask 对核心目录的命名和路径有明确的默认约定,目的是简化开发,无需手动配置就能快速上手。
- 模板文件夹
- 默认名称:templates(全小写,固定命名)
- 默认路径:和 Flask 应用实例的启动文件(如app.py)同级目录下的templates文件夹。
- 作用:存放 Jinja2 模板文件(.html/.jinja等),Flask 的render_template()函数默认从这个文件夹读取模板。
- 自定义方式:创建 Flask 实例时,通过template_folder参数指定自定义路径 / 名称。
# 自定义模板文件夹为「my_templates」(同级目录) app = Flask(__name__, template_folder='my_templates') # 也可指定绝对路径:template_folder='/Users/xxx/projects/templates'
- 静态文件文件夹
- 名称:static(全小写,固定命名)
- 默认路径:和启动文件同级目录下的static文件夹。
- 作用:存放 CSS、JS、图片、字体等静态资源,模板中通过url_for(‘static’, filename=’css/style.css’)引用。
- 自定义文件夹名称 / 路径:static_folder参数;自定义访问 URL 前缀(默认是/static):static_url_path参数。
# 自定义静态文件夹为「my_static」,访问前缀改为「/assets」 app = Flask(__name__, static_folder='my_static', static_url_path='/assets') # 此时访问style.css的URL变为:http://127.0.0.1:5000/assets/css/style.css
- 启动入口,flask run方式启动 或 app.run()(代码内直接启动)
flask run(官方推荐的开发启动方式)
这是 Flask CLI 命令,依赖click库解析参数,默认约定如下:- 默认寻找启动文件:
- 优先读取FLASK_APP环境变量的值(比如export FLASK_APP=app.py);
- 如果未设置FLASK_APP,自动在当前目录按顺序查找:app.py → wsgi.py → application.py;
2. 默认寻找应用实例:
找到启动文件后,默认查找名为app的 Flask 实例(即app = Flask(name));如果实例名不是app,需通过FLASK_APP指定,格式:FLASK_APP=文件名:实例名,比如:# 启动文件是myapp.py,实例名是my_app export FLASK_APP=myapp:my_app flask run3. 启动参数默认值: - host:127.0.0.1(仅本机可访问)
- port:5000
- debug:False(生产模式,无热重载、调试器)
- 其他常用核心默认配置
SECRET_KEY:用于 session 加密、CSRF 保护等,必须手动设置
管理环境变量
安装 pip install python-dotenv
Flask 会从项目根目录的 .flaskenv 和 .env 文件读取环境变量并设置到当前环境。
Flask 2.0+ 内置支持,无需手动调用load_dotenv())
- .env:存储敏感配置(SECRET_KEY、数据库密码等),必须加入.gitignore
- .flaskenv:存储非敏感的 Flask 命令配置(如 FLASK_APP、FLASK_ENV)
注意事项
- 环境变量优先级:系统已有的环境变量 > .env 文件中的变量(避免生产环境被.env 覆盖);
- 生产环境建议:生产环境(如服务器 / 云服务)不建议用 .env 文件,而是直接在服务器上配置系统环境变量(比如 Docker、Nginx、云平台的环境变量配置),.env 仅用于开发 / 测试环境;
参考
Written on December 10, 2025
