当前位置:首页 » 《休闲阅读》 » 正文

深入解读 FastAPI:现代、高性能的 Python Web 框架

21 人参与  2024年12月04日 12:01  分类 : 《休闲阅读》  评论

点击全文阅读


个人名片
在这里插入图片描述
?作者简介:java领域优质创作者
?个人主页:码农阿豪
?工作室:新空间代码工作室(提供各种软件服务)
?个人邮箱:[2435024119@qq.com]
?个人微信:15279484656
?个人导航网站:www.forff.top
?座右铭:总有人要赢。为什么不能是我呢?

专栏导航:

码农阿豪系列专栏导航
面试专栏:收集了java相关高频面试题,面试实战总结???️
Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用???
Redis专栏:Redis从零到一学习分享,经验总结,案例实战???
全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有???

目录

深入解读 FastAPI:现代、高性能的 Python Web 框架1. 什么是 FastAPI?1.1 FastAPI 的主要特点 2. 快速上手2.1 安装 FastAPI 和 Uvicorn2.2 构建第一个 FastAPI 应用 3. FastAPI 核心功能详解3.1 路由3.2 请求体和数据校验3.3 查询参数3.4 路径参数3.5 响应模型 4. 构建实战项目:Todo 应用4.1 项目需求4.2 定义 Pydantic 模型4.3 实现路由4.4 运行测试 5. 高级功能5.1 中间件5.2 后台任务5.3 集成数据库 6. 总结

深入解读 FastAPI:现代、高性能的 Python Web 框架

FastAPI 是基于 Python 的现代 Web 框架,以其高性能、易用性和自动生成的交互式 API 文档而备受关注。它适用于需要快速开发和高吞吐量的应用场景,如微服务、实时数据处理和机器学习服务。


1. 什么是 FastAPI?

FastAPI 是一个高性能的 Web 框架,基于 Python 3.7+ 构建,依赖于 Starlette(用于网络框架核心)和 Pydantic(用于数据校验)。它以 OpenAPI 和 JSON Schema 标准为核心,为开发者提供自动化的文档生成和强大的数据验证功能。

1.1 FastAPI 的主要特点
高性能:性能接近 Node.js 和 Go,基于异步支持(asyncio)。易用性:开发者体验极佳,支持类型提示。自动文档:内置自动生成 Swagger UI 和 ReDoc 文档。内置校验:使用 Pydantic 进行数据校验,保证输入输出的准确性。支持异步编程:通过 asyncawait 实现高并发。
2. 快速上手
2.1 安装 FastAPI 和 Uvicorn

FastAPI 通常与 Uvicorn 一起使用,后者是一个轻量级的 ASGI 服务器。

pip install fastapi uvicorn
2.2 构建第一个 FastAPI 应用

创建文件 main.py

from fastapi import FastAPIapp = FastAPI()@app.get("/")async def read_root():    return {"message": "Hello, FastAPI!"}@app.get("/items/{item_id}")async def read_item(item_id: int, q: str = None):    return {"item_id": item_id, "q": q}

运行服务器:

uvicorn main:app --reload

访问以下地址即可看到结果:

http://127.0.0.1:8000:返回 {"message": "Hello, FastAPI!"}http://127.0.0.1:8000/items/42?q=example:返回 {"item_id": 42, "q": "example"}

自动生成的文档:

Swagger UI: http://127.0.0.1:8000/docsReDoc: http://127.0.0.1:8000/redoc
3. FastAPI 核心功能详解
3.1 路由

FastAPI 支持 GET、POST、PUT、DELETE 等 HTTP 方法。示例:

from fastapi import FastAPIapp = FastAPI()@app.post("/items/")async def create_item(name: str, price: float):    return {"name": name, "price": price}
3.2 请求体和数据校验

利用 Pydantic 模型定义请求体:

from fastapi import FastAPIfrom pydantic import BaseModelapp = FastAPI()class Item(BaseModel):    name: str    description: str = None    price: float    tax: float = None@app.post("/items/")async def create_item(item: Item):    return {"item_name": item.name, "item_price": item.price}

传入 JSON 数据:

{  "name": "Laptop",  "description": "A high-end laptop",  "price": 1500.99,  "tax": 100.0}
3.3 查询参数

查询参数具有自动校验和类型转换功能:

@app.get("/search/")async def search_items(keyword: str, limit: int = 10):    return {"keyword": keyword, "limit": limit}
3.4 路径参数

路径参数可以通过类型提示自动校验:

@app.get("/users/{user_id}")async def get_user(user_id: int):    return {"user_id": user_id}
3.5 响应模型

通过 response_model 指定返回数据结构:

from typing import Listclass ItemOut(BaseModel):    name: str    price: float@app.get("/items/", response_model=List[ItemOut])async def list_items():    return [        {"name": "Phone", "price": 699.99, "tax": 50},        {"name": "Laptop", "price": 1500.99}    ]

4. 构建实战项目:Todo 应用
4.1 项目需求
用户可以创建、查看、更新和删除任务。数据保存在内存中(可扩展为数据库)。
4.2 定义 Pydantic 模型
from pydantic import BaseModelclass TodoItem(BaseModel):    id: int    title: str    completed: bool
4.3 实现路由
from fastapi import FastAPI, HTTPExceptionfrom typing import Listapp = FastAPI()todos = []@app.post("/todos/", response_model=TodoItem)async def create_todo(todo: TodoItem):    todos.append(todo)    return todo@app.get("/todos/", response_model=List[TodoItem])async def list_todos():    return todos@app.get("/todos/{todo_id}", response_model=TodoItem)async def get_todo(todo_id: int):    for todo in todos:        if todo.id == todo_id:            return todo    raise HTTPException(status_code=404, detail="Todo not found")@app.put("/todos/{todo_id}", response_model=TodoItem)async def update_todo(todo_id: int, updated_todo: TodoItem):    for index, todo in enumerate(todos):        if todo.id == todo_id:            todos[index] = updated_todo            return updated_todo    raise HTTPException(status_code=404, detail="Todo not found")@app.delete("/todos/{todo_id}")async def delete_todo(todo_id: int):    for index, todo in enumerate(todos):        if todo.id == todo_id:            todos.pop(index)            return {"message": "Todo deleted"}    raise HTTPException(status_code=404, detail="Todo not found")
4.4 运行测试

启动服务器后,可以通过 Swagger UI 测试以下功能:

创建任务。查看任务列表。更新任务状态。删除任务。
5. 高级功能
5.1 中间件

FastAPI 支持中间件,用于处理全局逻辑(如请求日志记录):

from fastapi.middleware.cors import CORSMiddlewareapp.add_middleware(    CORSMiddleware,    allow_origins=["*"],    allow_methods=["*"],    allow_headers=["*"],)
5.2 后台任务

FastAPI 提供 BackgroundTasks 支持异步任务处理:

from fastapi import BackgroundTasksasync def write_log(message: str):    with open("log.txt", "a") as f:        f.write(f"{message}\n")@app.post("/log/")async def log_message(message: str, background_tasks: BackgroundTasks):    background_tasks.add_task(write_log, message)    return {"message": "Task submitted"}
5.3 集成数据库

使用 SQLAlchemy 集成数据库:

pip install sqlalchemy databases

配置示例:

from databases import Databasefrom sqlalchemy import create_engine, MetaDataDATABASE_URL = "sqlite:///./test.db"database = Database(DATABASE_URL)engine = create_engine(DATABASE_URL)metadata = MetaData()

6. 总结

FastAPI 凭借其类型安全、异步支持和自动文档生成,已经成为构建现代 Web 和 API 服务的热门选择。从简单的增删改查到复杂的异步任务处理,FastAPI 为开发者提供了丰富的功能。如果你正在寻找一个高效、现代的框架,FastAPI 是一个不错的选择。


点击全文阅读


本文链接:http://zhangshiyu.com/post/196418.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1