FastAPI:Python 高性能 Web 框架的优雅之选

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 的官方文档中列举了许多特性,其中最打动开发者的核心优势包括:

  1. 高性能:基于 Starlette 和 Pydantic,性能与 NodeJS 和 Go 相当,是目前最快的 Python Web 框架之一。
  2. 开发效率极高:得益于优秀的编辑器支持(自动补全、类型检查),开发速度提升 200%~300%。
  3. 减少 Bug:强类型系统消除了约 40% 的人为错误。
  4. 自动生成文档:无需额外配置,即可获得交互式的 Swagger UI 和 ReDoc 文档。
  5. 原生异步支持:完美支持 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 无疑是当下的优雅之选

结尾

此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
希望能得到大家的【❤️一个免费关注❤️】感谢!
希望对初学者有帮助;致力于办公自动化的小小程序员一枚

Read more

SQL Server的安装和简单使用

SQL Server的安装和简单使用

目录 一、SQL Server 1.1、简介 1.2、安装包 二、安装SQL Server 2.1、双击安装包 2.2、选择自己想要安装的位置 2.3、点击安装 2.4、安装完成之后会出现以下页面,按照序号依次点击 2.5、不用管密钥,点击下一步 2.6、选择【我接受】 2.7、是否检查更新 2.8、由于我没有Azure的ID什么的,就跳过了直接下一步 2.9、功能选择 2.10、实例配置 2.11、服务账户配置

By Ne0inhk
深入剖析Spring框架:架构、缺陷与演进之路

深入剖析Spring框架:架构、缺陷与演进之路

深入剖析Spring框架:架构、缺陷与演进之路 * 引言:Spring的辉煌与挑战 * 一、Spring源码架构分析 * 1.1 整体架构:模块化的艺术 * 核心容器(Core Container) * 1.2 IoC容器:Spring的心脏 * 1.3 AOP实现:优雅的横切关注点解决方案 * 二、Spring的缺陷与不足 * 2.1 性能瓶颈:反射的代价 * 2.2 配置复杂性:灵活性的双刃剑 * 2.3 启动时间:云原生时代的痛点 * 2.4 响应式编程的局限性 * 三、改进Spring的方案 * 3.1 编译时增强:GraalVM与Spring Native * 3.2 模块化精简:面向云原生的瘦身

By Ne0inhk
Flutter 组件 freezed_collection 的鸿蒙化适配实战 - 驾驭极致集合不可变性大坝、构建 OpenHarmony 分布式端高性能、防篡改、类型安全的数据阵列方案

Flutter 组件 freezed_collection 的鸿蒙化适配实战 - 驾驭极致集合不可变性大坝、构建 OpenHarmony 分布式端高性能、防篡改、类型安全的数据阵列方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 freezed_collection 的鸿蒙化适配实战 - 驾驭极致集合不可变性大坝、构建 OpenHarmony 分布式端高性能、防篡改、类型安全的数据阵列方案 前言 在鸿蒙(OpenHarmony)生态的工业级交付、重型金融结算以及对业务逻辑零缺陷容忍的跨端政务系统中。“集合数据的不可变性与深层防篡改维度”是衡量整个系统架构鲁棒性的最终质量门禁。面对包含数万个 SKU 商品详情、海量设备状态快照、甚至是金融流水大波次的 0308 批次工程大盘。如果仅仅依靠 Dart 原生的 List.unmodifiable 或者是干瘪的运行时报错。不仅会导致在定位多线程并发竞态(Race Condition)时让架构师如同在逻辑废墟中盲人摸象。更会因为缺乏编译期强制约束。令整个系统的状态管理在跨设备同步时陷入严重的混乱盲区。 我们需要一种“逻辑严丝合缝、操作物理隔离”的集合资产保护艺术。 freezed_collection 是一套专注于无缝整

By Ne0inhk
从下载到运行:MySQL 详细安装配置完整教程

从下载到运行:MySQL 详细安装配置完整教程

从下载到运行:MySQL 超详细安装配置完整教程 * 从下载到运行:MySQL 详细安装配置完整教程 * 一、MySQL下载步骤 * 二、MySQL安装流程 * 三、MySQL环境配置与验证 * 1. 配置环境变量 * 2. 验证MySQL是否安装成功 * 四、Navicat链接MySQL * 1. 安装Navicat 从下载到运行:MySQL 详细安装配置完整教程 一、MySQL下载步骤 首先访问MySQL官方下载地址,进入MySQL的官方下载页面。 下载完成后,在本地找到下载好的MySQL安装文件,双击文件启动安装程序。 二、MySQL安装流程 双击安装文件后,会进入MySQL安装类型选择界面,界面中提供5种安装模式,各自功能如下: Developer Default(开发者默认):包含MySQL开发所需的全套组件(如数据库服务、客户端工具、SDK等),适合开发人员使用。Server only(仅服务器):仅安装MySQL数据库服务,适合仅需搭建数据库服务器的场景。Client

By Ne0inhk