|
| 1 | +# Starlette 简介 |
| 2 | +Starlette 是一个轻量级的 **ASGI(Asynchronous Server Gateway Interface)** 框架,专为构建高性能的异步 Web 应用而设计。它是 Python 生态系统中广受欢迎的 Web 框架 **FastAPI** 的基础框架。Starlette 提供了一套简洁而强大的工具集,帮助开发者快速构建高效、可扩展的 Web 服务。 |
| 3 | + |
| 4 | +--- |
| 5 | + |
| 6 | +## Starlette 的主要特点 |
| 7 | +以下是 Starlette 的核心特性: |
| 8 | + |
| 9 | +1. **异步支持** |
| 10 | +Starlette 充分利用 Python 的异步编程模型,支持 `async` 和 `await` 语法,允许开发者编写非阻塞代码,从而显著提升应用的并发处理能力。 |
| 11 | +2. **轻量级设计** |
| 12 | +与全栈框架相比,Starlette 非常轻量,专注于提供路由、请求和响应处理等核心功能,避免了冗余组件的负担。 |
| 13 | +3. **高性能** |
| 14 | +得益于异步特性和轻量级设计,Starlette 在处理大量并发请求时表现出色,非常适合高性能 Web 应用。 |
| 15 | +4. **ASGI 兼容** |
| 16 | +Starlette 完全遵循 ASGI 标准,可以无缝集成任何 ASGI 服务器,例如 **Uvicorn** 或 **Daphne**。 |
| 17 | +5. **中间件支持** |
| 18 | +Starlette 提供灵活的中间件系统,开发者可以在请求和响应的处理过程中插入自定义逻辑。 |
| 19 | +6. **WebSocket 支持** |
| 20 | +内置对 WebSocket 的支持,使得开发实时应用(如聊天室或数据推送)变得简单高效。 |
| 21 | +7. **模板渲染** |
| 22 | +虽然 Starlette 本身不附带模板引擎,但它与 **Jinja2** 等工具集成良好,方便生成动态 HTML 页面。 |
| 23 | +8. **静态文件服务** |
| 24 | +Starlette 支持轻松服务静态文件,例如 CSS、JavaScript 和图片。 |
| 25 | +9. **请求和响应对象** |
| 26 | +提供直观的 API 来处理 HTTP 请求和构建响应,简化开发流程。 |
| 27 | +10. **测试客户端** |
| 28 | +内置测试客户端,便于开发者进行单元测试和集成测试,确保应用质量。 |
| 29 | + |
| 30 | +--- |
| 31 | + |
| 32 | +## 如何使用 Starlette |
| 33 | +### 安装 |
| 34 | +要开始使用 Starlette,需要通过 `pip` 安装它,通常会搭配一个 ASGI 服务器(如 Uvicorn): |
| 35 | + |
| 36 | +```bash |
| 37 | +pip install starlette uvicorn |
| 38 | +``` |
| 39 | + |
| 40 | +### 创建一个简单的应用 |
| 41 | +以下是一个简单的 Starlette Web 应用示例: |
| 42 | + |
| 43 | +```python |
| 44 | +from starlette.applications import Starlette |
| 45 | +from starlette.responses import JSONResponse |
| 46 | +from starlette.routing import Route |
| 47 | + |
| 48 | +# 定义首页处理函数 |
| 49 | +async def homepage(request): |
| 50 | + return JSONResponse({'hello': 'world'}) |
| 51 | + |
| 52 | +# 配置路由 |
| 53 | +routes = [ |
| 54 | + Route("/", homepage), |
| 55 | +] |
| 56 | + |
| 57 | +# 创建 Starlette 应用 |
| 58 | +app = Starlette(debug=True, routes=routes) |
| 59 | +``` |
| 60 | + |
| 61 | +在这个例子中: |
| 62 | + |
| 63 | ++ 我们定义了一个路由 `/`,访问该路径时返回 JSON 数据 `{"hello": "world"}`。 |
| 64 | ++ `debug=True` 开启调试模式,便于开发。 |
| 65 | + |
| 66 | +### 运行应用 |
| 67 | +使用 Uvicorn 运行应用: |
| 68 | + |
| 69 | +```bash |
| 70 | +uvicorn your_module:app |
| 71 | +``` |
| 72 | + |
| 73 | +其中 `your_module` 是包含 `app` 的 Python 文件名。运行后,访问 `http://127.0.0.1:8000/` 即可看到返回的 JSON 响应。 |
| 74 | + |
| 75 | +--- |
| 76 | + |
| 77 | +## Starlette 的核心组件 |
| 78 | +1. **路由** |
| 79 | +Starlette 使用路由将 URL 路径映射到对应的处理函数,支持路径参数和查询参数等功能。 |
| 80 | +2. **请求对象** |
| 81 | +`request` 对象封装了 HTTP 请求的信息,包括请求方法、URL、头部、查询参数等。 |
| 82 | +3. **响应对象** |
| 83 | +提供多种响应类型,如 `JSONResponse`(返回 JSON)、`HTMLResponse`(返回 HTML)、`RedirectResponse`(重定向)等。 |
| 84 | +4. **中间件** |
| 85 | +中间件允许在请求处理的不同阶段执行自定义代码,例如日志记录或身份验证。 |
| 86 | +5. **WebSocket** |
| 87 | +通过 `WebSocket` 对象支持实时双向通信,适用于需要即时响应的场景。 |
| 88 | + |
| 89 | +--- |
| 90 | + |
| 91 | +## Starlette 与 FastAPI 的关系 |
| 92 | +Starlette 是 **FastAPI** 的底层框架。FastAPI 在 Starlette 的基础上增加了更多高级功能,例如: |
| 93 | + |
| 94 | ++ 自动生成 API 文档(基于 OpenAPI)。 |
| 95 | ++ 数据验证(通过 Pydantic)。 |
| 96 | ++ 依赖注入系统。 |
| 97 | + |
| 98 | +因此,Starlette 更适合需要轻量级框架的场景,而 FastAPI 则更专注于快速开发复杂的 RESTful API。 |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +## 总结 |
| 103 | +Starlette 是一个功能强大、灵活且轻量级的 ASGI 框架,非常适合构建高性能的异步 Web 应用。它对异步编程的优秀支持、简洁的设计以及与现代 Python 技术的兼容性,使其成为开发者的理想选择。无论是简单的 API 服务还是复杂的实时应用,Starlette 都能提供坚实的基础。 |
| 104 | + |
| 105 | + |
| 106 | + |
| 107 | + |
| 108 | + |
0 commit comments