核心定位:轻量级 Python Web 微框架 设计核心为简洁 灵活 易用 无强制项目结构 适合 Web 开发入门 快速原型开发和小型 Web 应用开发
Flask 本身核心代码量少 核心能力由两个核心第三方库支撑 构成架构基础
- Werkzeug:底层库 提供 WSGI 接口 HTTP 请求 / 响应处理 路由等核心功能
- Jinja2:强大的模板引擎 用于动态生成 HTML 页面
安装方式 :通过 pip 安装 可配置国内源(阿里 华为)提升安装速度 基础命令pip3 install flask
|-------|----------------------------------------------------------------------------------|
| 组件 | 核心作用 |
| 应用实例 | Flask 核心入口,由Flask(__name__)创建 管理路由 配置 扩展 上下文等所有核心资源 |
| 路由系统 | 由 Werkzeug 实现 通过@app.route装饰器建立URL 与视图函数的映射关系 |
| 视图函数 | 处理 HTTP 请求的核心逻辑单元 接收请求参数 处理业务逻辑 返回响应结果(文本 / 模板 / JSON) |
| 上下文对象 | 临时存储请求相关数据(请求上下文request/session应用上下文current_app/g)让视图函数无需传参即可获取请求 / 应用信息 |
| 模板引擎 | 处理动态页面生成 实现模板解析 数据渲染 模板继承复用 |
| 扩展机制 | 提供统一的扩展接入入口 可集成 Flask-WTF(表单)Flask-SQLAlchemy(数据库)等扩展 丰富架构能力 |
路由与视图函数
路由是 Flask 核心 实现 URL 与视图函数的关联 支持多种灵活配置方式
- 动态路由 :通过
<参数名>捕获 URL 中的动态数据 参数会自动传递给视图函数 实现个性化响应 - 多 HTTP 请求方法 :默认支持 GET 请求 通过
methods参数指定允许的请求方法(如 POST PUT)非指定方法访问会返回 405 错误 - Jinja2 模板渲染
- 模板文件默认存放在
templates文件夹 通过render_template()函数加载模板并传递动态数据 模板中用{``{ 变量名 }}接收 - 模板继承:通过基础模板(如
base.html)定义通用布局 用{% block 块名 %}定义可替换区域 子模板通过{% extends '基础模板.html' %}继承 并重写块内容 提升页面复用性
- 模板文件默认存放在
Flask 路由架构设计
路由是 Flask 连接 URL 与业务逻辑的核心 基于 Werkzeug 实现高效的 URL 匹配机制架构设计具备以下特点
- 装饰器式定义 :通过
@app.route(URL, methods=[])极简方式实现路由映射 底层将路由规则(URL 请求方法 参数规则)注册到应用实例的路由注册表中 - 动态路由支持 :通过
<参数名>/<类型:参数名>(如<int:id>)定义动态 URL 底层自动解析 URL 中的动态参数并传递给视图函数 适配个性化请求(如/user/<id>) - 请求方法限定 :通过
methods参数指定路由允许的 HTTP 方法(GET/POST/PUT/DELETE)未允许的方法会直接返回 405 错误 实现请求方法的精细化控制 - 路由匹配优先级 :静态路由(如
/index)优先级高于动态路由(如/user/<name>)避免 URL 匹配冲突 保证路由解析的准确性
表单处理与数据验证
Flask 结合Flask-WTF扩展简化表单处理 支持便捷的字段定义和数据验证
- 安装扩展:
pip3 install flask-wtf - 核心配置:设置
app.secret_key用于 CSRF 保护 生产环境需使用安全的随机字符串 - 定义表单类:继承
FlaskForm通过 WTForms 字段(如StringField)定义表单项 通过validators添加验证规则 - 常用验证规则:
DataRequired()(必填)Length()(长度限制)Email()(邮箱验证)EqualTo()(字段值匹配) - 视图函数处理:实例化表单对象 通过
form.validate_on_submit()判断表单是否合法提交 GET 请求 / 验证失败时渲染模板 成功则处理表单数据 - 模板渲染表单:需添加
{``{ form.csrf_token }}防止 CSRF 攻击 通过{``{ 表单对象.字段名() }}生成表单标签
生产环境部署
开发环境用app.run()启动 生产环境需搭配专业 Web 服务器 常用组合
- Gunicorn :Python WSGI HTTP 服务器 启动时可指定工作线程数 监听地址和端口 核心关联
应用模块:应用实例 - Nginx:作为反向代理 处理静态文件请求 将动态请求转发给 Flask 应用 提升服务稳定性和性能