✨ 那个闪耀的小型 ASGI 框架。✨
介绍
Starlette 是一个轻量级的 ASGI 框架/工具包,非常适合用 Python 构建异步网络服务。
它已做好生产准备,并为您提供以下内容:
- 一个轻量级、低复杂度的 HTTP 网络框架。
- WebSocket 支持。
- 进程中的后台任务。
- 启动和关闭事件。
- 测试客户端基于
httpx
构建。 - CORS、GZip、静态文件、流式响应。
- 会话和 Cookie 支持。
- 100%测试覆盖率。
- 100%类型注释的代码库。
- 几乎没有硬性依赖。
- 与
asyncio
和trio
后端兼容。 - 针对独立基准的整体性能出色。
要求
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 许可协议的代码。
精心设计与制作。
— ⭐️ —