Starlette:一个轻量级的 Python ASGI 框架

0 阅读2分钟

Starlette:一个轻量级的 Python ASGI 框架

Starlette 在 GitHub 上已经拿到 12,359 Star 了。

这是一个轻量级的 ASGI 框架和工具包,专门用于在 Python 中构建异步 Web 服务。

正文顶部截图

1、这玩意儿是干嘛的

Starlette 的核心目标很简单:提供一个足够轻、足够简单的框架来运行异步 Web 服务。

它基于 ASGI 标准,内置了 WebSocket 支持、进程内后台任务、启动和关闭事件。HTTP 层面覆盖 CORS、GZip、静态文件、流式响应。状态管理覆盖 Session 和 Cookie。测试客户端直接基于 httpx,开箱即用。

整个代码库做了完整的类型注解,测试覆盖率达到 100%。核心依赖只有一个 anyio,httpx、jinja2、python-multipart、itsdangerous、pyyaml 都是可选安装。

README区域截图

2、为什么要用它

Python 的异步 Web 框架选择不少,但很多要么功能堆砌过多,要么基础能力缺失。Starlette 卡在中间位置:该有的都有,不该带的都不装。

它同时兼容 asyncio 和 trio 两种异步后端,在独立基准测试中性能表现靠前。更重要的是它的两用设计。你可以把它当作完整的 Web 框架来用,也可以只拿其中的组件作为 ASGI 工具包。甚至只需要一个 PlainTextResponse,就能搭出一个最小应用。

这种模块化思路让组件可以在不同 ASGI 框架之间复用,中间件和挂载应用都能共享。API 边界清晰,每个部分单独理解起来也不费劲。

3、安装和使用

安装:

pip install starlette

还需要一个 ASGI 服务器,比如 uvicorn:

pip install uvicorn

最小示例:

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route

async def homepage(request):
    return JSONResponse({'hello': 'world'})

routes = [Route("/", endpoint=homepage)]
app = Starlette(debug=True, routes=routes)

运行:

uvicorn main:app

如果想启用所有可选功能:

pip install starlette[full]

4、适合哪些人用

  • 需要构建异步 Web 服务的 Python 开发者
  • 在做 ASGI 生态工具、需要可复用组件的人
  • 追求低依赖、类型安全、测试覆盖完善的项目