12k
All articles

5 个值得了解的"开箱即用"Web 框架

比较 Rails、Django、Laravel、Phoenix 和 Loco 五款内置功能齐全的 Web 框架,了解其核心功能、突出优势及适用团队。

OpenReplay Team
OpenReplay Team
5 个值得了解的"开箱即用"Web 框架

“开箱即用”(batteries-included)的 Web 框架将路由、带数据库迁移的 ORM、身份认证、后台任务、邮件和测试环境打包成一个协调统一的整体。团队只需配置默认值,而不必逐一挑选、拼接各个独立的库。

如果你用 Express 或 Next.js 开发,对下面的情形一定不陌生:要做的功能只是一封密码重置邮件,可你得先花一周时间比较各种 ORM、队列库和邮件库,然后才发现所选的认证库和你的会话存储并不兼容。

本文介绍五种语言中的五个框架,它们都替你内置了上述组件:Rails、Django、Laravel、Phoenix 和 Loco。我们按照统一的标准逐一介绍每个框架所用的语言、内置功能、最突出的特点以及适合的团队。

核心要点

  • 开箱即用的框架在同一个版本中提供路由、ORM、迁移、认证、任务、邮件和测试,因此这些组件的文档统一维护,升级也同步进行。
  • 代价是耦合:框架越能让你快速做出可用的功能,你的应用就越依赖它的约定和升级路径。
  • 自 Rails 8.0 起,Rails 内置了身份认证生成器,Solid Queue 成为新应用默认的 Active Job 后端。
  • 自 Django 6.0 起,核心包含了用于将后台任务加入队列的 Tasks 框架,但生产环境中执行任务需要第三方 worker 后端。
  • Phoenix 的 mix phx.gen.auth 默认生成基于邮箱、支持魔法链接(magic link)登录的认证功能;Loco 则基于 Axum 和 SeaORM,把 Rails 模式带到了 Rust。

什么是开箱即用的框架?

开箱即用的框架把标准的后端各层视为框架本身的一部分,而不是附加插件。你可以得到路由、数据访问与迁移、身份认证、任务队列、邮件发送和测试工具,它们专为协同工作而构建,配套的生成器生成的代码会用到每一层。

如果你习惯了 Express,区别在于:通常你需要自己选一个 ORM(例如 Prisma)、一个队列(例如 BullMQ)、一个认证库和一个邮件库,然后把它们串联起来并逐个升级。而在开箱即用的框架中,这些组件都来自同一个项目,共享一套文档和生成器,并在同一个版本中一起升级。JavaScript 生态也有自己的选择:AdonisJS 最接近这种模式,详见我们对 Rails 风格 JavaScript 框架的介绍;NestJS 则侧重于应用结构,而不是把每一层都打包进来。

开箱即用的框架适合以交付功能为主要瓶颈的团队。如果需求经常与框架在数据、认证或部署方面的预设相冲突,这类框架就不太合适。对于希望替换单独某一层的团队,或者小到用一个路由器加一个库就能搞定的服务,它们同样不是好的选择。有些生态在文化上更偏好组合小型库,Go 就是典型例子,详见我们的 Go Web 框架指南。

耦合是开箱即用框架的代价。那些能加快首个版本上线的默认设置,同样会把你的业务逻辑与框架约定绑定在一起,这在升级或隔离测试时就会显现出影响。

Ruby on Rails

Rails 是让”约定优于配置”成为主流的 Ruby 框架,也是其他四个框架的参照标杆。当前发布系列为 Rails 8.1,最新补丁版本是 Rails 8.1.4。

**内置功能:**路由、带迁移的 Active Record、Action Mailer、Active Job 以及默认的测试框架。从 8.0 版本开始,Rails 自带默认的身份认证生成器,可以为基本的登录和密码重置功能生成模型、控制器、视图、路由和迁移。在任务方面,Solid Queue 是新应用默认的 Active Job 后端。它基于数据库运行,因此无需 Redis。

**最突出的特点:**生成器和约定。只要文件、类和数据表遵循预期的命名规则,路由和模型映射几乎无需任何配置就能工作。

bin/rails generate scaffold Post title:string body:text

Rails 的 scaffold 命令会为一个完整的 CRUD 资源生成模型、迁移、控制器、视图、路由和测试。

**适合:**希望拥有最深度的约定驱动工作流、并乐于接受 Rails 设计理念的小型团队。

Django

Django 是 Python 的开箱即用框架,其最大亮点是根据模型自动生成的管理后台。Django 团队于 2026 年 8 月宣布发布 Django 6.1。

**内置功能:**URL 路由、能根据模型变更生成迁移的 ORM、django.contrib.auth、邮件 API 和测试框架。自 Django 6.0 起,核心包含了 Tasks 框架(django.tasks),用于定义后台任务并将其加入队列。其内置后端仅用于开发和测试,因此在生产环境中运行任务需要另外引入第三方 worker 后端。

最突出的特点:Django admin 管理站点,它能根据模型定义构建出一个可用的后台管理界面。这是用各种独立库自行拼装的技术栈所无法提供的。

python manage.py startapp blog

Django 的 startapp 命令会创建一个应用包,其中包含模型、视图、admin 注册、测试和迁移等模块。Django 核心没有 CRUD 脚手架生成器。

**适合:**已经在使用 Python 的团队,以及从第一天起就需要内部管理工具的应用。

Laravel

Laravel 是 PHP 框架,在这五个框架中拥有最广泛的官方生态。当前主版本为 Laravel 13。

**内置功能:**Laravel 在一个框架中集成了路由、带迁移的 Eloquent ORM、队列系统、邮件、Blade 模板引擎、Artisan CLI 和测试。官方的 starter kits(入门套件)可以生成身份认证脚手架,Echo 等官方包则负责客户端的实时广播。

**最突出的特点:**API 设计统一,队列、邮件和数据库用起来就像同一个库;此外还有大量官方包,覆盖核心之外的各种需求。

php artisan make:model Post --migration --controller --resource

带上这些参数后,Laravel 的 make:model 命令会创建一个 Eloquent 模型,以及对应的迁移和资源控制器。

**适合:**希望使用随处可得的 PHP 托管服务、并且更倾向于使用官方包而非从社区中挑选的团队。

Phoenix

Phoenix 将开箱即用的理念带到了 Elixir。它把生成器、Ecto 数据库库与 LiveView 结合在一起,后者用于构建交互式的服务端渲染界面。当前版本为 Phoenix 1.8。

**内置功能:**路由、Ecto schema 与迁移、Channels 和 PubSub,以及 mix phx.gen.auth。该生成器默认生成基于邮箱的身份认证,支持魔法链接登录,密码登录为可选项,并且默认基于 LiveView 构建。Phoenix 最大的亮点是 LiveView。

mix phx.gen.html Blog Post posts title:string body:text

Phoenix 的 mix phx.gen.html 命令会生成 context、schema、迁移、控制器、模板和测试。

**适合:**不想额外维护一个独立 SPA 的实时类产品。

Loco

Loco 是一个受 Rails 启发的 Rust 框架,基于 Axum 构建,模型和迁移由 SeaORM 提供支持。项目主页将其定位为开箱即用的 Rust 框架,当前版本为 v1.2.0。

**内置功能:**Loco 主页列出了模型、控制器、任务、邮件和认证,这些组件都可以生成并自动串联起来。身份认证基于 JWT。

cargo loco generate scaffold post title:string content:text

根据 Loco 生成器文档,Loco 的 scaffold 命令会创建模型、迁移、请求与响应类型、带路由的 JSON API 控制器以及模型测试。除非传入 --no-auth,否则脚手架生成的路由都需要 JWT 认证。

**适合:**既想要编译型、强类型的 Rust 后端,又想要 Rails 工作流的团队。

如何选择开箱即用的框架?

首先从团队已经熟悉的语言出发,再用各框架最突出的特点来做最终取舍:想要现成的管理后台,选 Django;想要约定驱动的生成器,选 Rails;想要官方包和便捷的托管,选 Laravel;想要实时的服务端渲染 UI,选 Phoenix;想在 Rust 中使用同样的模式,选 Loco。在最终决定之前,针对待办列表中的一个真实功能,运行候选框架的那条生成器命令,看看在它生成的代码之外,你还需要自己写多少代码。

常见问题

Django 内置的 Tasks 框架能取代 Celery 吗?

不能完全取代。Django 6.0 新增的 django.tasks 模块负责定义、校验任务并将其加入队列,以及存储任务结果,但它并不自带 worker。其内置的 ImmediateBackend 和 DummyBackend 仅用于开发和测试。在生产环境中,你需要安装一个提供持久化队列和 worker 进程的第三方后端,并单独运行该 worker。对于存在相互依赖关系的任务,Celery 仍然是更合适的选择。

可以把 Rails 或 Laravel 用作 React 或 Next.js 前端的纯 API 后端吗?

可以。运行 rails new my_api --api 会得到一个更精简的中间件栈,并让 ApplicationController 继承自 ActionController::API。它还会阻止生成器创建视图、helper 和静态资源,因此脚手架会渲染 JSON。自 Laravel 11 起,php artisan install:api 会创建 routes/api.php 并安装 Laravel Sanctum,用于处理 SPA 和移动客户端的令牌认证。

Node.js 有开箱即用的框架吗?

AdonisJS 是 Node.js 中最接近的选择。它是一个 TypeScript 框架,内置身份认证、ORM、校验、邮件、队列、缓存和测试,各部分专为协同工作而构建。其数据层是 Lucid,一个基于 Knex 构建、包含迁移功能的 Active Record ORM。测试基于同一团队开发的 Japa 测试框架。身份认证支持 Web 应用的会话认证和 API 的访问令牌认证。

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.