FastAPI:Python 高性能 Web 框架的优雅之选
目录
专栏导读
❤️ 欢迎各位佬关注! ❤️
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
📕 此外还有python基础专栏:请点击——>Python基础学习专栏 求订阅
🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏 求订阅
👍 该系列文章专栏:请点击——>Python办公自动化专栏 求订阅
🏳️🌈 ZEEKLOG博客主页:请点击——> ZEEKLOG的博客主页 求关注
🏳️🌈 知乎主页:请点击——> 知乎主页 求关注
🏳️🌈 Github主页:请点击——> Github主页 求Star⭐
🏳️🌈 个人博客主页:请点击——> 个人的博客主页 求收藏
🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手
FastAPI:Python 高性能 Web 框架的优雅之选
在 Python 的 Web 开发领域,长期以来 Django 和 Flask 占据了主导地位。Django 以其“大而全”著称,Flask 则以“微内核”灵活闻名。然而,随着 Python 3.6+ 类型提示(Type Hints)的普及以及异步编程(AsyncIO)的成熟,一个新的挑战者横空出世——FastAPI。
FastAPI 不仅仅是一个框架,它更代表了一种现代、高效且优雅的 Python 编程范式。
项目demo:点我下载
为什么选择 FastAPI?
FastAPI 的官方文档中列举了许多特性,其中最打动开发者的核心优势包括:
- 高性能:基于 Starlette 和 Pydantic,性能与 NodeJS 和 Go 相当,是目前最快的 Python Web 框架之一。
- 开发效率极高:得益于优秀的编辑器支持(自动补全、类型检查),开发速度提升 200%~300%。
- 减少 Bug:强类型系统消除了约 40% 的人为错误。
- 自动生成文档:无需额外配置,即可获得交互式的 Swagger UI 和 ReDoc 文档。
- 原生异步支持:完美支持
async/await,轻松处理高并发。
实战:构建一个优雅的博客 API
为了展示 FastAPI 的优雅,我们将构建一个简单的博客 API,包含文章的创建、查询、更新和删除(CRUD)。
1. 环境准备
首先,确保你的 Python 版本在 3.6 以上。安装 FastAPI 和 ASGI 服务器 Uvicorn:
pip install fastapi uvicorn[standard]2. 项目结构
为了保持代码整洁,我们将项目分为三个文件:
models.py: 定义数据模型(Schema)。database.py: 模拟数据库操作。main.py: 应用入口和路由逻辑。
3. 定义数据模型 (models.py)
FastAPI 深度集成了 Pydantic。我们只需定义好数据模型,参数校验、数据转换和文档生成就会自动完成。
from typing import List, Optional from uuid import UUID from pydantic import BaseModel, Field from datetime import datetime # 基础模型,包含共享字段classPostBase(BaseModel): title:str= Field(..., min_length=3, max_length=100, description="文章标题") content:str= Field(..., description="文章内容") author:str= Field(..., description="作者名称") tags: List[str]= Field(default=[], description="文章标签")# 创建时使用的模型classPostCreate(PostBase):pass# 更新时使用的模型,所有字段均为可选classPostUpdate(BaseModel): title: Optional[str]=None content: Optional[str]=None tags: Optional[List[str]]=None# 数据库返回的完整模型classPost(PostBase):id: UUID created_at: datetime updated_at: datetime classConfig: from_attributes =True代码解析:
- 使用
Field可以定义字段的元数据(如长度限制、描述),这些信息会直接反映在 API 文档中。 - 继承机制让我们能够优雅地复用代码,同时区分创建、更新和读取时的数据结构。
4. 编写 API 逻辑 (main.py)
接下来是核心的 API 实现。注意看我们是如何利用 Python 的类型提示来定义路由参数的。
from fastapi import FastAPI, HTTPException, status from typing import List from uuid import UUID, uuid4 from datetime import datetime from.models import Post, PostCreate, PostUpdate # 假设我们有一个简单的内存数据库实例 dbfrom.database import db app = FastAPI( title="我的优雅博客 API", description="基于 FastAPI 构建的高性能博客系统演示", version="1.0.0")@app.post("/posts/", response_model=Post, status_code=status.HTTP_201_CREATED, tags=["Posts"])asyncdefcreate_post(post_in: PostCreate):""" 创建一个新的博客文章 """# 这里的 post_in 已经被自动校验并转换为 PostCreate 对象 new_post = Post(id=uuid4(), created_at=datetime.now(), updated_at=datetime.now(),**post_in.model_dump())returnawait db.create_post(new_post)@app.get("/posts/", response_model=List[Post], tags=["Posts"])asyncdefget_posts():returnawait db.get_all_posts()@app.get("/posts/{post_id}", response_model=Post, tags=["Posts"])asyncdefget_post(post_id: UUID): post =await db.get_post(post_id)ifnot post:raise HTTPException(status_code=404, detail="文章未找到")return post 优雅之处:
response_model=List[Post]:FastAPI 会自动过滤掉不属于Post模型的数据,并确保返回的 JSON 格式正确。async def:原生支持异步,对于 I/O 密集型任务(如读写数据库),性能提升显著。- 类型注入:
post_in: PostCreate让编辑器知道post_in是什么类型,从而提供智能提示。
5. 运行与体验
在项目根目录下运行:
uvicorn fastapi_blog_demo.main:app --reload 现在,打开浏览器访问 http://127.0.0.1:8000/docs。
见证奇迹的时刻:
你会看到一个自动生成的、交互式的 API 文档(Swagger UI)。
- 你可以直接在网页上测试 API。
- 每个字段的类型、验证规则都清晰可见。
- 无需编写一行前端代码,你就有了一个可视化的控制台。
总结
FastAPI 不仅仅是一个 Web 框架,它是 Python 类型系统的一次完美实践。它让代码既具备了静态语言的严谨(类型检查、自动补全),又保留了动态语言的灵活性(简洁、易读)。
如果你正在寻找一个现代、高性能且开发体验极佳的 Python Web 框架,FastAPI 无疑是当下的优雅之选。