Skip to content

starlette

✨ 那个闪耀的小型 ASGI 框架。✨

Build StatusPackage version


介绍

Starlette 是一个轻量级的 ASGI 框架/工具包,非常适合用 Python 构建异步网络服务。

它已做好生产准备,并为您提供以下内容:

  • 一个轻量级、低复杂度的 HTTP 网络框架。
  • WebSocket 支持。
  • 进程中的后台任务。
  • 启动和关闭事件。
  • 测试客户端基于 httpx 构建。
  • CORS、GZip、静态文件、流式响应。
  • 会话和 Cookie 支持。
  • 100%测试覆盖率。
  • 100%类型注释的代码库。
  • 几乎没有硬性依赖。
  • asynciotrio 后端兼容。
  • 针对独立基准的整体性能出色。

要求

Python 3.8 及以上版本

安装

$ pip3 install starlette

您还需要安装一个 ASGI 服务器,例如 uvicorn、daphne 或 hypercorn。

$ pip3 install uvicorn

示例

example.py:

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


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


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

然后运行该应用程序……

$ uvicorn example:app

欲获取更完整的示例,请见此处。

依赖项

Starlette 仅需要 anyio ,以下依赖项是可选的:

  • httpx - 如果您想要使用 TestClient ,则为必填项。
  • jinja2 - 如果您想要使用 Jinja2Templates ,则为必填项。
  • python-multipart - 如果您想要支持表单解析,则需要,搭配 request.form()
  • itsdangerous - 为 SessionMiddleware 支持所必需。
  • pyyaml - 为 SchemaGenerator 支持所必需。

您可以使用 pip3 install starlette[full] 安装所有这些。

框架或工具包

Starlette 被设计为既可以作为一个完整的框架使用,也可以作为一个 ASGI 工具包使用。您可以独立使用其任何组件。

from starlette.responses import PlainTextResponse


async def app(scope, receive, send):
    assert scope['type'] == 'http'
    response = PlainTextResponse('Hello, world!')
    await response(scope, receive, send)

example.py 中运行 app 应用程序:

$ uvicorn example:app
INFO: Started server process [11509]
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

使用 --reload 运行 uvicorn 以在代码更改时启用自动重新加载。

模块化

Starlette 所依据的模块化设计促进了可复用组件的构建,这些组件可以在任何 ASGI 框架之间共享。这应该能够促成一个共享中间件和可挂载应用程序的生态系统。

清洁的 API 分离也意味着单独理解每个组件会更容易。


Starlette 是遵循 BSD 许可协议的代码。
精心设计与制作。

— ⭐️ —