当前位置: 首页 > 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

相关文章:

  • CentOS7 安装最新版 Docker
  • LLM大模型系列(十):深度解析 Prefill-Decode 分离式部署架构
  • 代码随想录打卡第三十天 动态规划
  • java集合(十七) ---- TreeSet 类
  • win10系统外接触控显示屏触摸校准
  • mysql 学习
  • Sequelize mysql2驱动 不支持 caching_sha2_password
  • 【wsl】docker
  • datawhale Dify动手实践教程 第1次笔记
  • 课设作业图书管理系统
  • UWB协议精读:IEEE 802.15.4z-2020,15. HRP UWB PHY, STS, HRP-ERDEV, BPRF, HPRF,
  • 探秘卷积神经网络(CNN):从原理到实战的深度解析
  • 红队攻防渗透技术实战流程:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份
  • 生成对抗网络(GAN)与深度生成模型实战
  • CppCon 2016 学习:Rainbow Six Siege: Quest for Performance
  • 移动端 WebView 页面性能调试实战:WebDebugX等工具协同与优化
  • 【pytest进阶】Pytest之conftest详解
  • MCP(模型上下文协议)协议和Http协议对比
  • 窄带和宽带谁略谁优
  • python web开发-Flask 重定向与URL生成完全指南
  • 长春做网站电话/关键词优化公司哪家强
  • 做哪种网站比较简单/百度接单平台
  • ubuntu wordpress端口/优化营商环境心得体会个人
  • 优惠券网站怎么做代理/怎样制作网页新手自学入门
  • 选择常州网站建设公司/杭州seo排名
  • 网络运营主要做什么/seo网站推广服务