ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Python Web 框架:FastAPI

Python Web 框架:FastAPI FastAPI 是一个现代、高性能的 Python Web 框架专为构建 API 而生。它基于 Python 的类型提示能够自动进行数据校验并生成 API 文档是当前 Python 生态中增长最快的 Web 框架之一。FastAPI 的核心特性FastAPI 之所以备受青睐主要得益于它这些“自带光环”的特性极高的性能基于 Starlette异步框架和 Pydantic数据校验库构建性能可媲美 Node.js 和 Go在 Python Web 框架中处于顶尖水平。自动生成 API 文档无需手动编写代码即文档。它会自动为你生成交互式 Swagger UI (/docs) 和 ReDoc (/redoc) 文档极大方便了调试和前后端协作。强大的数据校验利用 Pydantic 和 Python 类型提示能自动校验请求体、查询参数等确保数据准确并在校验失败时自动返回清晰的错误信息。原生异步支持完美支持async/await语法能高效处理高并发 I/O 场景非常适合构建微服务和实时 Web 应用。灵活的依赖注入系统通过Depends机制可以轻松管理数据库会话、权限验证、配置等依赖让代码更解耦、更易于测试和复用。使用1. 安装与环境准备建议创建一个虚拟环境来隔离项目依赖。# 创建并激活虚拟环境 (以venv为例) python -m venv venv source venv/bin/activate # Linux/macOS # venv\Scripts\activate # Windows # 安装 FastAPI 和 ASGI 服务器 Uvicorn pip install fastapi uvicorn[standard]2. 编写第一个 API创建一个main.py文件from fastapi import FastAPI # 1. 创建 FastAPI 应用实例 app FastAPI() # 2. 定义路径操作装饰器 (根路径 /) app.get(/) async def read_root(): # 返回 JSON 响应 return {message: Hello, FastAPI!} # 3. 定义另一个带路径参数的 API app.get(/items/{item_id}) async def read_item(item_id: int, q: str None): return {item_id: item_id, query: q}3. 启动服务在终端中运行以下命令uvicorn main:app --reloadmain指main.py文件。app指文件中创建的FastAPI实例。--reload开启热重载代码修改后服务器会自动重启方便开发。4. 查看效果服务启动后可以访问以下地址API 端点http://127.0.0.1:8000/或http://127.0.0.1:8000/items/5Swagger UI 文档http://127.0.0.1:8000/docsReDoc 文档http://127.0.0.1:8000/redoc路由与参数定义路由使用装饰器app.get()、app.post()、app.put()、app.delete()等来定义对应 HTTP 方法的路由。from fastapi import FastAPI app FastAPI() app.get(/users/) async def get_users(): return [{username: alice}, {username: bob}] app.post(/users/) async def create_user(): # 创建用户的逻辑 return {message: User created}参数处理FastAPI 能自动识别三种主要参数类型。1. 路径参数从 URL 路径中获取参数并支持类型声明和校验。from fastapi import FastAPI, Path app FastAPI() app.get(/books/{book_id}) async def get_book( # 路径参数 book_id, 类型为 int, 校验其值大于 0 且小于 101 book_id: int Path(..., title书籍ID, ge1, le100) ): return {book_id: book_id}2. 查询参数URL 中问号后的键值对如/items?skip0limit10。from fastapi import FastAPI, Query app FastAPI() app.get(/items/) async def list_items( # 查询参数 skip 和 limit带默认值和描述 skip: int Query(0, description跳过的记录数), limit: int Query(10, description返回的记录数) ): return {skip: skip, limit: limit}3. 请求体参数用于POST、PUT等请求将 JSON 数据映射到 Pydantic 模型中。from fastapi import FastAPI from pydantic import BaseModel, Field app FastAPI() # 1. 定义请求体的数据结构 class UserCreate(BaseModel): username: str Field(..., min_length3, max_length20, description用户名) password: str Field(..., min_length6, description密码) app.post(/register/) async def register_user(user: UserCreate): # FastAPI 会自动将 JSON 请求体解析为 UserCreate 实例 return {message: fUser {user.username} registered}核心功能功能说明示例场景依赖注入通过Depends注入数据库会话、配置、认证等依赖实现解耦和复用。db: Session Depends(get_db)响应模型使用response_model参数来过滤和格式化输出数据确保 API 返回结构一致。app.get(/user, response_modelUserOut)中间件处理请求和响应的全局逻辑如日志记录、CORS 配置。全局异常捕获、跨域设置。后台任务使用BackgroundTasks将发送邮件、处理图片等耗时操作放到后台异步执行不阻塞响应。用户注册后发送欢迎邮件。文件上传通过UploadFile类型轻松处理文件上传。用户头像上传。WebSocket支持 WebSocket 协议用于构建聊天、实时通知等应用。实时聊天室。
返回列表