← 返回题目列表

Flask 是什么?它为什么被称为轻量级 Web 框架?

高频 简单 第 1 / 27 题 更新于 2026/07/27
FlaskWeb框架微框架Python后端

简化版

Flask 是一个 Python 轻量级 Web 框架,核心只提供路由、请求响应、模板渲染、上下文等基础能力,数据库、表单、认证等功能通常通过扩展组合实现。它被称为轻量级,是因为框架本身约束少、可插拔、项目结构灵活。

详细版

Flask 常被称为 micro framework,也就是“微框架”。这里的“微”不是功能弱,而是核心保持克制:

  • 路由:把 URL 映射到视图函数。
  • 请求响应:封装 requestResponsejsonify 等对象。
  • 模板:默认集成 Jinja2 模板引擎。
  • 上下文:通过应用上下文和请求上下文管理当前应用、请求、全局临时对象。
  • 扩展生态:通过 Flask-SQLAlchemy、Flask-Migrate、Flask-Login、Flask-WTF 等扩展补齐工程能力。

Flask 和 Django 的差异在于:Django 是“全家桶”,内置 ORM、Admin、认证、表单等;Flask 是“核心 + 扩展”,更自由,但也要求开发者自己设计项目结构和技术选型。

完整版教学

一、Flask 的定位是什么

Flask 是一个面向 Python 的 Web 框架,主要用于开发 Web 页面、后端接口、管理后台、小型服务、微服务 API 等。它的核心设计哲学是:框架提供 Web 请求处理的基础骨架,但不强制你使用某个数据库、某种 ORM、某种项目结构或某套认证方案。

这和 Django 的风格很不一样。Django 更像一个完整的后端开发平台,很多能力开箱即用;Flask 更像一套干净的 Web 核心,你可以按项目需要选择扩展。面试时如果只说“Flask 很轻”,还不够,要说清“轻”体现在哪里:核心功能少、扩展机制灵活、默认约束少、项目组织自由。

一个最小 Flask 应用可能只有几行:

from flask import Flask

app = Flask(__name__)

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

这段代码体现了 Flask 的基本模型:创建应用对象,通过装饰器注册路由,请求到达时调用对应视图函数,视图返回响应。

二、轻量级不等于不适合工程

很多人误解 Flask,以为轻量级就只能写小项目。其实 Flask 本身确实核心简单,但它可以通过扩展和合理项目结构支撑中大型项目。比如数据库层可以用 SQLAlchemy,数据库迁移可以用 Flask-Migrate,登录认证可以用 Flask-Login,API 可以用 Flask-RESTful 或 Flask-Smorest,配置可以通过应用工厂和环境变量管理。

轻量级真正意味着“框架不给你做太多决定”。这既是优点,也是成本。优点是灵活:你可以自由选择 ORM、缓存、任务队列、目录结构;成本是需要团队自己制定规范,否则项目很容易变成“每个人写一套风格”。

所以面试时可以这样表达:Flask 适合需要灵活组合、快速开发、服务边界清晰的场景;如果项目需要统一 Admin、强约定 ORM、权限后台等全套能力,Django 可能更省心。

三、Flask 的核心组件

Flask 常见核心能力包括:

  • Werkzeug:底层 WSGI 工具库,负责请求、响应、路由等基础设施。
  • Jinja2:模板引擎,用于服务端渲染 HTML。
  • Routing:URL 路由映射。
  • Context:应用上下文和请求上下文。
  • Extension:扩展机制,让第三方库和 Flask 应用集成。

理解这些组件有助于回答追问。比如面试官问“Flask 为什么可以直接用 request 对象”,答案就和请求上下文有关;问“Flask 如何部署”,就会涉及 WSGI;问“Flask 如何组织大型项目”,就会涉及蓝图和应用工厂。

四、工程里使用 Flask 的常见方式

小项目可以直接在一个文件里创建 app、写路由、启动服务。但工程项目更常见的是分层组织:

app/
  __init__.py        # create_app 应用工厂
  config.py          # 配置
  extensions.py      # db、migrate、login_manager 等扩展对象
  blueprints/
    user.py
    order.py

这种结构能避免所有代码堆在一个文件里,也方便测试时创建不同配置的 app。面试里提到应用工厂、蓝图、扩展初始化,会比只会写 app = Flask(__name__) 更有工程味。

五、常见误区与面试追问

第一个误区是“Flask 没有 ORM”。更准确地说,Flask 核心不内置 ORM,但常搭配 SQLAlchemy。没有内置不是缺陷,而是设计选择。

第二个误区是“Flask 没有项目结构”。Flask 不强制结构,但团队可以制定结构。自由不是混乱,工程项目仍然需要清晰的目录、配置、扩展初始化、蓝图拆分、测试策略。

第三个误区是“Flask 比 Django 性能一定更好”。框架核心轻不代表业务接口一定快。真实性能更多取决于数据库查询、缓存、序列化、网络 I/O、部署方式和代码质量。

六、常见误区与追问

追问角度准确回答不要这样答
框架定位Flask 是轻量 Web 框架,核心小、扩展多Flask 只是玩具框架
工程能力依靠蓝图、应用工厂、扩展和配置管理组织项目一个文件写到底
性能判断看业务代码、数据库、缓存和部署只按框架大小判断性能
  • 误区:Flask 轻量就等于功能弱。 Flask 核心少,但扩展生态能补齐 ORM、迁移、认证、表单、缓存等能力,关键是自己选型和组织。
  • 误区:Flask 不适合大型项目。 大项目可以用应用工厂、蓝图、分层目录、配置隔离和测试体系治理复杂度,只是框架不强制你这样做。
  • 误区:Flask 自带 ORM。 Flask 核心不内置 ORM,常见组合是 Flask-SQLAlchemy;这属于扩展选择,不是核心能力。
  • 追问:Flask 和 Werkzeug、Jinja2 是什么关系? Flask 基于 Werkzeug 处理 WSGI、路由、请求响应等底层能力,使用 Jinja2 做模板渲染。
  • 追问:为什么说 Flask 自由度高也有代价? 自由意味着项目结构、扩展选择、事务边界、安全配置都要团队自己定规范,否则容易变成随意拼装。
  • 追问:面试中如何概括 Flask 的核心优势? 可以说它简单、灵活、扩展友好,适合快速构建 Web/API,也适合在清晰工程规范下扩展成中大型服务。

记忆钩子:Flask 的关键词不是“少”,而是“核心少、组合强”。面试时要同时讲灵活性和工程治理成本。

七、加强记忆

Flask 是一个轻量但可扩展的 Python Web 框架,核心只管 Web 请求处理的基础能力,数据库、认证、迁移等通过扩展组合。它的优势是灵活、简单、可控;代价是需要开发者自己做好项目结构和工程规范。