Skip to content

hellowac/starlette-zh-cn

 
 

Repository files navigation

starlette

✨ 闪亮的小 ASGI 框架. ✨


Build Status Package version Supported Python Version


文档: 英文 - 中文

源码: https://github.com/encode/starlette


Starlette

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

它已经达到生产级别,并提供以下功能:

  • 一个轻量、低复杂度的 HTTP Web 框架。
  • WebSocket 支持。
  • 进程内后台任务。
  • 启动和关闭事件支持。
  • 基于 httpx 的测试客户端。
  • 提供 CORS、GZip、静态文件、流式响应支持。
  • 会话和 Cookie 支持。
  • 100% 测试覆盖率。
  • 100% 类型注解代码库。
  • 很少的硬性依赖。
  • 兼容 asynciotrio 后端。
  • 独立基准测试 中表现优秀。

安装

$ pip install starlette

您还需要安装一个 ASGI 服务器,例如 uvicorndaphnehypercorn

$ 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 运行该应用:

$ uvicorn example:app

如需更完整的示例,请参考 encode/starlette-example

依赖

Starlette 仅需要 anyio 作为必需依赖,以下是可选依赖:

  • httpx - 如果您需要使用 TestClient
  • jinja2 - 如果您需要使用 Jinja2Templates
  • python-multipart - 如果您需要支持表单解析(通过 request.form())。
  • itsdangerous - 如果您需要支持 SessionMiddleware
  • pyyaml - 如果您需要支持 SchemaGenerator

您可以通过以下命令一次性安装所有这些依赖项:

$ pip 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 is BSD licensed code.
Designed & crafted with care.

— ⭐️ —

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.4%
  • Other 0.6%