
在 Python Web 框架的世界里,FastAPI、Django 和 Flask 早已家喻户晓,但有没有一款框架,既轻量又灵活,还能优雅地应对大规模项目?答案是 Litestar。
我第一次接触 Litestar,是几年前在公司做一个新项目时。当时它几乎没有什么流量和宣传,但我抱着尝试的心态用上了它。没想到,从那以后,我几乎所有新的项目都选择了它------尤其是那些需要异步处理、类型注解驱动的 Web 应用。
为什么我会如此推荐它?不仅因为它轻量和现代,更因为它在处理多文件项目、依赖注入和数据库集成时,比常见框架少了很多麻烦。今天,我就带大家看看 Litestar 究竟有哪些独特之处,让我在实际项目中爱不释手。
怎么安装
安装 Litestar 非常简单,跟大多数 Python 包一样,可以直接使用 pip
1、安装基础版本
在终端或命令行输入:
bash
pip install litestar
这会安装 Litestar 核心框架,适合做基础异步 Web 开发。
2、 安装带 SQLAlchemy 支持的版本(可选)
如果你的项目需要使用 SQLAlchemy,可以安装附带插件的版本:
bash
pip install litestar[sqlalchemy]
这样可以直接使用 Litestar 的 SQLAlchemy 集成插件,包括自动生成 DTO、依赖注入和仓库模式支持。
3、 安装 Pydantic/Msgspec 支持(可选)
Litestar 支持多种 schema 库,如果你想用 Pydantic:
bash
pip install litestar[pydantic]
如果想用 Msgspec:
bash
pip install litestar[msgspec]
可以根据项目需要灵活选择。
4、 验证安装是否成功
在 Python 中输入:
python
import litestar
print(litestar.__version__)
如果能正确输出版本号,就说明安装成功了 ✅
5、 运行第一个示例应用
保存一个文件 app.py
:
python
from litestar import Litestar, get
@get("/greet")
async def greet(name: str) -> str:
return f"Hi, {name}!"
app = Litestar([greet])
然后在命令行运行:
bash
litestar run app:app
浏览器访问 http://127.0.0.1:8000/greet?name=Bob
就能看到结果。
乍一看,这和 FastAPI 的例子几乎一样,但 Litestar 有一些细节设计,让它在 Python 生态中更为独特。
框架名字背后的故事
你可能在一些旧资料中看到 Litestar 曾被称为 "Starlite",这是它的原始名称。
Starlette 是一个用于构建异步 Python Web 应用的工具包,可以单独使用,也可以作为更复杂框架或库的组件。比如 FastAPI 就仍然在底层使用 Starlette。Litestar 最初也是基于 Starlette 构建的,因此最初被命名为 "Starlite",显然是对 Starlette 的一种致敬。
随着时间推移,Litestar 放弃了对 Starlette 的依赖,改为使用自己实现的功能。社交媒体上有人认为 "Starlite" 这个名字容易引起混淆,尤其是 Starlette 已经不再被使用了。于是,这个原本叫 "Starlite" 的项目在 2023 年发布的 2.0 版本 中正式更名为 Litestar,并沿用至今。
代码级别的"可扩展性"
很多人提到框架可扩展性,第一反应就是"能承载多少流量"。我想谈的是另一种可扩展性------代码级别的可扩展性。
Django 擅长大项目,但对单文件应用不太友好。微框架(如 FastAPI、Flask)一开始适合单文件,但当项目增长时,就可能遇到循环导入等问题。
举个例子,FastAPI 的路由装饰器绑定在应用对象上,多文件项目就必须引入"Router"来解决循环导入问题。而 Litestar 的路由装饰器是独立的,这让多文件项目的管理更自然,也让框架的层次化设计更加清晰。
python
from litestar import Router
from litestar.di import Provide
_write_widget_router = Router(
guards=[some_auth_function],
route_handlers=[
create_widget,
delete_widget,
update_widget,
]
)
widget_router = Router(
dependencies={"widget_dependency": Provide(some_widget_dependency)},
path="/widgets",
route_handlers=[
get_widget,
get_widget_list,
_write_widget_router,
]
)
通过这种方式,可以轻松实现不同路由的认证、依赖注入等配置,非常适合实际项目需求。
不依赖 Pydantic 的灵活性
Pydantic 很强大,但 FastAPI 对它高度绑定,会带来一些限制,比如与 SQLAlchemy 的 ORM 类配合时,需要写多套 schema。
Litestar 支持 Pydantic,但并不强制,还可以用 dataclass、msgspec,甚至可以为 SQLAlchemy 模型生成 DTO(数据传输对象),减少重复代码和出错风险:
python
from litestar.dto import DTOConfig
from litestar.plugins.sqlalchemy import SQLAlchemyDTO
class ReadWidget(SQLAlchemyDTO[Widget]):
config = DTOConfig(exclude={"id", "internal_notes"})
这样,DTO 会自动继承 ORM 模型字段,仅排除不需要的字段,简化开发流程。
与 SQLAlchemy 的深度结合
Litestar 对 SQLAlchemy 提供了官方插件,包括:
- ORM 类直接作为输入输出 schema
- DTO 自动生成子集或字段重映射
- SQLAlchemy engine 与 per-request session 管理
- 集成 Advanced Alchemy,提供泛型仓库和服务层抽象
示例:
python
from litestar.plugins.sqlalchemy import repository
class WidgetRepository(repository.SQLAlchemyAsyncRepository[Widget]):
model_type = Widget
自动生成 list()
、get_one()
、add()
、delete()
等方法,极大提升开发效率。
丰富但轻量的功能
Litestar 还自带多种便捷功能:
- 权限系统(guards + middlewares)
- 缓存/Stores
- 日志集成(标准库 + structlog)
- 错误处理标准化
- Prometheus / OpenTelemetry 指标支持
- htmx 支持
总的来说,Litestar 保持了微框架的轻量感,同时提供了很多可选增强功能。它不像 FastAPI 或 Django 那样追求"全能",而是用 Pythonic 的方式,把结构化和灵活性结合得恰到好处。
总结
如果你要做 Python 异步 Web 开发,尤其是使用 SQLAlchemy 或希望用轻量框架管理复杂项目,Litestar 非常值得尝试。它设计巧妙、扩展性好,并且能让你在多文件项目中保持代码整洁,同时减少重复和错误。
下次启动 Python Web 项目,不妨让 💡⭐ Litestar 带你上天 🚀🚀🚀。