当前位置: 首页 > news >正文

Python FastAPI详解

安装Fast API:https://fastapi.tiangolo.com/zh/

FastAPI的优点:

  1. 高性能
    FastAPI 基于 ASGI(异步服务器网关接口)和 Starlette 框架,支持异步编程,能够高效处理大量并发请求。其性能接近 Node.js 和 Go,比传统的 Python 框架(如 Django 和 Flask)快 3-5 倍,特别适合高并发场景。

  2. 自动生成 API 文档
    FastAPI 能够根据代码中的类型提示和注解自动生成交互式 API 文档(如 Swagger UI 和 ReDoc)。这不仅减少了手动编写文档的工作量,还方便了开发和调试。

  3. 类型提示与数据验证
    FastAPI 利用 Python 的类型提示机制和 Pydantic 库,提供强大的数据验证和序列化功能。这确保了输入数据的正确性,减少了运行时错误,并提高了代码的可读性和可维护性。

  4. 异步支持
    FastAPI 原生支持异步编程(async/await),能够高效处理 I/O 密集型任务(如数据库查询、API 调用),特别适合实时数据处理和高并发场景。

  5. 易于使用和学习
    FastAPI 的设计注重用户体验,代码简洁易懂,支持代码自动补全和编辑器提示,降低了学习曲线,提高了开发效率。

  6. 安全性
    FastAPI 内置支持多种安全机制,如 OAuth2、JWT 等认证方式,并提供 HTTPS 支持,确保 API 的安全性。

Pycharm中创建FastAPI项目:

先导入FastAPI,用来定义API

  • FastAPI 是一个 Python 框架,用来创建 Web API(应用程序接口)。你可以把它想象成一个工具箱,用来搭建一个可以接收请求并返回响应的服务器。

from fastapi import FastAPI

创建FastAPI实例

  • app 是整个应用的核心,它会处理所有的请求和响应。你可以把它看作一个“服务器”,它会监听用户的请求,并根据代码的逻辑返回相应的结果。

app = FastAPI()

装饰器

  • 这是一个装饰器,用来定义一个路由(route)。路由是用户访问 API 的路径。

  • @app.get("/") 表示当用户访问网站的根路径(即 /)时,会触发下面的函数。

  • / 是默认的首页路径,比如如果你的网站是 http://example.com,那么访问 http://example.com/ 就会触发这个路由。

@app.get("/")

异步函数

  • 这是一个异步函数(async 表示异步操作),名字叫 root

  • 异步操作是 FastAPI 的一个特性,它可以让程序在等待某些操作(比如数据库查询)时,同时处理其他请求,从而提高性能。

  • 这个函数的作用是处理上面定义的 / 路由的请求。

async def root():

函数的返回值

  • 这行代码是函数的返回值。

  • 它返回一个字典({"message": "Hello World"}),FastAPI 会自动将这个字典转换为 JSON 格式(一种常见的数据传输格式)。

  • 当用户访问 / 路径时,浏览器会收到一个 JSON 响应:{"message": "Hello World"}

return {"message": "Hello World"}

完整代码为:

from fastapi import FastAPI # 导⼊FastAPI,⽤于定义API
app = FastAPI() # 创建FastAPI实例
@app.get("/")
async def root():return {"message": "Hello World"}

运行应用:打开终端:输入uvicorn main:app --reload

方式一:终端输入命令启动 , main是程序的名称,app 是实例化的名称,uvicorn main:app --reload

打开浏览器中,在浏览器中输入终端给的网址,http://127.0.0.1:8000,你应该能够看到 FastAPI 自动生成的交互式文档,并在根路径 ("/") 返回的 JSON 响应。

方式二:

if __name__ == '__main__':import uvicornprint(__name__)uvicorn.run("run:app", host="127.0.0.1", port=8080, reload=True)

路径操作

union类型

⽤于⽀持多种数据类型的参数注解
from typing import Union # 导⼊Union, ⽤于定义可选类型
from fastapi import FastAPI # 导⼊FastAPI,⽤于构建RESTful API
@app.gte(/items/item_id)
def read_item(x:int,y:union[str,none]=none):print("x":x,"y":y)

FastAPI 交互式 API 文档

from fastapi import FastAPI # 引⼊FastAPI类,⽤于创建⼀个应⽤
import uvicorn # 引⼊uvicorn,⽤于启动服务
from typing import Union # 引⼊Union类,⽤于类型注解
from pydantic import BaseModel # 引⼊pydantic类,⽤于定义数据结构
app = FastAPI() # 创建⼀个应⽤,app是⼀个FastAPI实例
class Item(BaseModel): # 定义⼀个Item类,继承⾃BaseModel,⽤于定义请求体中的数据结构# 定义⼀个name属性,类型为strname: str# 定义⼀个price属性,类型为floatprice: float# 定义⼀个is_offer属性,类型为Union[bool, None],默认为Noneis_offer: Union[bool, None] = None
@app.get("/") # 装饰器,表示定义⼀个根路径的get请求
# 定义⼀个根路径的get请求,返回⼀个字典,键值分别为Hello和World
# async 表示异步请求,可以提⾼性能
# 测试访问:http://127.0.0.1:8000/
async def read_root():return {"Hello": "World"}
@app.get("/items/{item_id}")
# 定义⼀个路径参数为item_id的get请求,返回⼀个字典,键值分别为item_id和q
# Union[str, None] 表示q可以为str类型或者None类型,默认为None
# 测试访问:http://127.0.0.1:8000/items/3?q=abc
async def read_item(item_id: int, q: Union[str, None] = None):return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
# 测试访问:http://127.0.0.1:8000/items/3
async def update_item(item_id: int, item: Item):# 定义⼀个路径参数为item_id的put请求,返回⼀个字典,键值分别为item_name和item_idreturn {"item_name": item.name, "item_id": item_id}
if __name__ == "__main__":# 启停⽅式:# 1.⽅式1指令式:# 服务器启动指令 uvicorn main:app --reload# fastDemo1:app 表示main.py⽂件中的app实例# 服务器停⽌指令 ctrl+c# 2.⽅式2界⾯式:# ⿏标右键启动----》run main.py# 界⾯右上⻆的停⽌按钮# 启动服务,host指定主机地址,port指定端⼝号,reload=True表示当代码发⽣变化时,⾃动重启服务# main:app---- 表示main.py⽂件中的app实例uvicorn.run("fastAPIDemo3:app", host="127.0.0.1", port=8000, reload=Tr
ue)
代码块作用
依赖导入引入框架、服务器、类型注解和数据验证库
应用实例化创建FastAPI核心对象
Pydantic模型定义请求体数据结构并实现自动校验
路由装饰器绑定HTTP方法与URL路径到处理函数
请求处理函数实现业务逻辑并返回响应
服务器启动配置ASGI服务器参数并启动服务
from fastapi import FastAPI          # 核心框架类
import uvicorn                       # ASGI服务器
from typing import Union             # 类型注解工具
from pydantic import BaseModel       # 数据验证库

  • FastAPI:构建API的核心类。
  • uvicorn:用于启动高性能ASGI服务器。
  • Union:定义联合类型(如Union[str, None])。
  • BaseModel:创建数据模型的基类(用于请求体校验)。
app = FastAPI()  # 创建FastAPI应用实例
  • 核心对象:所有路由和配置的载体。
  • 自动注入:后续装饰器通过@app.get等绑定路由。

4. 路由与请求处理

(1) 根路径GET请求

class Item(BaseModel):name: str                       # 必填字段,类型为字符串price: float                    # 必填字段,类型为浮点数is_offer: Union[bool, None] = None  # 可选字段,默认为None
  • 作用:定义请求体的数据结构。
  • 校验规则
    • nameprice为必填字段,类型严格校验。
    • is_offer为可选字段,接受boolNone
  • 自动文档:模型结构会显示在Swagger UI中。

(2) 带路径参数的GET请求

@app.get("/")
async def read_root():return {"Hello": "World"}
  • 路径http://localhost:8000/
  • 行为:返回固定JSON响应。
  • 异步支持async声明使函数支持异步处理。

(3) 带请求体的PUT请求

@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):return {"item_name": item.name, "item_id": item_id}
  • 请求体校验item参数必须是符合Item模型的JSON。
  • 自动解析:FastAPI将JSON请求体转换为Item对象。
if __name__ == "__main__":uvicorn.run("fastAPIDemo3:app", host="127.0.0.1", port=8000, reload=True)
  • 模块定位fastAPIDemo3:app表示fastAPIDemo3.py文件中的app实例。
  • 参数说明
    • host:绑定到本地回环地址。
    • port:监听8000端口。
    • reload:开发模式下自动重载代码变更。
  • 启动方式
    • 直接运行脚本(python main.py)。
    • 命令行指令:uvicorn main:app --reload
http://www.lryc.cn/news/571471.html

相关文章:

  • 在Docker上安装Mongo及Redis-NOSQL数据库
  • JVM(4)——引用类型
  • CubeMax配置串口通讯
  • 微信小程序:将搜索框和表格封装成组件,页面调用组件
  • Kafka 向 TDengine 写入数据
  • 游戏技能编辑器界面优化设计
  • Java + Spring Boot + MyBatis 枚举变量传递给XML映射文件做判断
  • node.js使用websockify代理VNC代理使用NoVNC进行远程桌面实现方案
  • docker问题排查
  • 【Python系列PyCharm实战】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解决方案大全
  • 使用Kotlin开发后端服务的核心方法
  • 【大模型:知识库管理】--MinerU本地部署
  • 最新整理【剑侠情缘龙雀修复BGU版】linux服务端带授权后台+详细教程+包进游戏
  • LangSmith 深度解析:构建企业级LLM应用的全生命周期平台
  • 【day51】复习日
  • conda 下载指定 python 版本安装,即 base 环境为指定的python版本
  • Unity Editor代码引用子场景物体,需要激活子场景
  • 【 FastJSON 】解析多层嵌套
  • 希尔脚本简介及常用命令代码整理
  • 20倍光学镜头怎么实现20+20倍数实现
  • Spring @OnApplicationEvent 典型用法
  • MacOS15.5 MySQL8 开启 mysql_native_password
  • 【入门级-基础知识与编程环境:计算机的历史和常见用途】
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(2)- 分配策略
  • 338比特位技术
  • element ui el-table嵌套el-table,实现checkbox联动效果
  • 轻松搭建Linux开发环境:使用`build-essential`安装GCC编译器**
  • Flask设计网页截屏远程电脑桌面及切换运行程序界面
  • 软件体系结构-论述、设计、问答
  • C++---类和对象(中)