0


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

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

  • 专栏导航:

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

目录

深入解读 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 服务器。

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

创建文件

  1. main.py

  1. from fastapi import FastAPI
  2. app = FastAPI()@app.get("/")asyncdefread_root():return{"message":"Hello, FastAPI!"}@app.get("/items/{item_id}")asyncdefread_item(item_id:int, q:str=None):return{"item_id": item_id,"q": q}

运行服务器:

  1. 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/docs
  • ReDoc: http://127.0.0.1:8000/redoc

3. FastAPI 核心功能详解
3.1 路由

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

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

利用 Pydantic 模型定义请求体:

  1. from fastapi import FastAPI
  2. from pydantic import BaseModel
  3. app = FastAPI()classItem(BaseModel):
  4. name:str
  5. description:str=None
  6. price:float
  7. tax:float=None@app.post("/items/")asyncdefcreate_item(item: Item):return{"item_name": item.name,"item_price": item.price}

传入 JSON 数据:

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

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

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

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

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

通过

  1. response_model

指定返回数据结构:

  1. from typing import List
  2. classItemOut(BaseModel):
  3. name:str
  4. price:float@app.get("/items/", response_model=List[ItemOut])asyncdeflist_items():return[{"name":"Phone","price":699.99,"tax":50},{"name":"Laptop","price":1500.99}]

4. 构建实战项目:Todo 应用
4.1 项目需求
  • 用户可以创建、查看、更新和删除任务。
  • 数据保存在内存中(可扩展为数据库)。
4.2 定义 Pydantic 模型
  1. from pydantic import BaseModel
  2. classTodoItem(BaseModel):id:int
  3. title:str
  4. completed:bool
4.3 实现路由
  1. from fastapi import FastAPI, HTTPException
  2. from typing import List
  3. app = FastAPI()
  4. todos =[]@app.post("/todos/", response_model=TodoItem)asyncdefcreate_todo(todo: TodoItem):
  5. todos.append(todo)return todo
  6. @app.get("/todos/", response_model=List[TodoItem])asyncdeflist_todos():return todos
  7. @app.get("/todos/{todo_id}", response_model=TodoItem)asyncdefget_todo(todo_id:int):for todo in todos:if todo.id== todo_id:return todo
  8. raise HTTPException(status_code=404, detail="Todo not found")@app.put("/todos/{todo_id}", response_model=TodoItem)asyncdefupdate_todo(todo_id:int, updated_todo: TodoItem):for index, todo inenumerate(todos):if todo.id== todo_id:
  9. todos[index]= updated_todo
  10. return updated_todo
  11. raise HTTPException(status_code=404, detail="Todo not found")@app.delete("/todos/{todo_id}")asyncdefdelete_todo(todo_id:int):for index, todo inenumerate(todos):if todo.id== todo_id:
  12. todos.pop(index)return{"message":"Todo deleted"}raise HTTPException(status_code=404, detail="Todo not found")
4.4 运行测试

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

  1. 创建任务。
  2. 查看任务列表。
  3. 更新任务状态。
  4. 删除任务。

5. 高级功能
5.1 中间件

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

  1. from fastapi.middleware.cors import CORSMiddleware
  2. app.add_middleware(
  3. CORSMiddleware,
  4. allow_origins=["*"],
  5. allow_methods=["*"],
  6. allow_headers=["*"],)
5.2 后台任务

FastAPI 提供

  1. BackgroundTasks

支持异步任务处理:

  1. from fastapi import BackgroundTasks
  2. asyncdefwrite_log(message:str):withopen("log.txt","a")as f:
  3. f.write(f"{message}\n")@app.post("/log/")asyncdeflog_message(message:str, background_tasks: BackgroundTasks):
  4. background_tasks.add_task(write_log, message)return{"message":"Task submitted"}
5.3 集成数据库

使用 SQLAlchemy 集成数据库:

  1. pip install sqlalchemy databases

配置示例:

  1. from databases import Database
  2. from sqlalchemy import create_engine, MetaData
  3. DATABASE_URL ="sqlite:///./test.db"
  4. database = Database(DATABASE_URL)
  5. engine = create_engine(DATABASE_URL)
  6. metadata = MetaData()

6. 总结

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

标签: fastapi python 前端

本文转载自: https://blog.csdn.net/weixin_44976692/article/details/144169719
版权归原作者 码农阿豪@新空间代码工作室 所有, 如有侵权,请联系我们删除。

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

还没有评论