人人都会AI编程

19.2 核心能力:路由、视图、模板、ORM、中间件、异常处理

更新时间:2026-07-12

无论你用的是 Django、Flask 还是 FastAPI,一个 Web 框架的本质工作都可以拆解为这六大块。理解了它们,就掌握了 Web 开发的通用语言。

路由(URL 分发)

路由把用户请求的 URL 映射到对应的处理函数上。

  • Django:在 urls.py 中用 path()re_path() 定义,支持正则和路径转换器。
  • Flask:用装饰器 @app.route('/user/<id>') 直接在视图函数上声明,直观简洁。
  • FastAPI:同样用装饰器 @app.get('/user/{id}'),并自动根据类型注解生成文档。
  • 实用要点:RESTful 设计中通常按资源组织路由,如 /users/users/123,配合 HTTP 方法区分操作。

视图(请求处理逻辑)

视图就是接收请求、调用业务逻辑、返回响应的函数或类。

  • Django:有 FBV(基于函数的视图)和 CBV(基于类的视图),CBV 封装了通用模式(列表页、详情页)。
  • Flask:简单的函数视图,通过 request 全局对象获取请求数据,返回字符串、JSON 或模板渲染结果。
  • FastAPI:视图函数通过参数接收请求体、查询参数、路径参数,并利用 Pydantic 模型自动校验。
  • 真实写法:视图应该“瘦”——只做参数解析和返回格式化,业务逻辑交给 service 层。

模板(页面渲染)

模板让你把动态数据嵌入 HTML,生成最终页面。

  • Django 自带的模板语言支持变量、过滤器、标签、模板继承,非侵入式,适合前后端不分离场景。
  • Flask 使用 Jinja2,语法与 Django 模板相似,但更灵活。
  • FastAPI 也可以搭配 Jinja2 使用,但现在更多项目采用前后端分离,模板用得少了。
  • 最佳实践:模板里只做展示逻辑,不要写复杂业务代码,保持干净。

ORM(对象关系映射)

ORM 让你用 Python 对象操作数据库,而不用手写 SQL。

  • Django ORM 是最强效的:一个 Model 类对应一张表,QuerySet 提供链式过滤、聚合、关联查询,迁移工具自动管理表结构。
  • Flask 通常搭配 SQLAlchemy(独立 ORM),通过模型类定义表,session 管理读写,灵活性极高。
  • FastAPI 也常用 SQLAlchemy 或异步 ORM(如 Tortoise-ORM、SQLModel)。
  • 实用提醒:ORM 方便,但不能完全替代 SQL 知识。遇到复杂查询或性能问题,还是要看生成的 SQL 并优化索引。

中间件(请求/响应处理链)

中间件是全局的请求和响应处理器,可以在视图之前或之后执行统一逻辑。

  • Django 的中间件是一个类,包含 process_requestprocess_response 等方法,用于跨请求的认证、日志、压缩等。
  • Flask 同样可编写中间件,或使用装饰器、before_request/after_request 钩子。
  • FastAPI 的中间件是简单的 ASGI 中间件,可以拦截和处理所有请求/响应。
  • 常见场景:用户认证拦截、跨域处理、请求日志、异常统一捕获和返回友好错误。

异常处理(错误返回与兜底)

Web 应用难免出错,优雅地处理异常是专业性的体现。

  • Django 有内置的 404、500 页面,可在 handler404 中自定义,业务异常可通过继承 django.core.exceptions 实现。
  • Flask 使用 errorhandler 装饰器注册错误处理函数,捕捉特定 HTTP 异常或自定义异常。
  • FastAPI 可以直接抛出 HTTPException,框架会自动返回规范 JSON;还可以通过 exception_handler 注册全局异常处理器。
  • 实用原则:不要向用户暴露内部调用栈,统一返回 {"detail": "原因"} 格式的 JSON,并在日志中记录完整异常信息。

这六大核心能力构成了 Web 框架的骨架。不同的框架在写法、默认配置上有差异,但思想相通。掌握它们之后,切换框架会非常快,并且你能清晰判断项目在哪个环节出了问题。