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

Python学习笔记--FastAPI入门常规操作

一.简介

  • FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,专为在 Python 中构建 RESTful API 而设计。
  • FastAPI 使用 Python 3.8+ 并基于标准的 Python 类型提示。
  • FastAPI 建立在 Starlette 和 Pydantic 之上,利用类型提示进行数据处理,并自动生成API文档。
  • FastAPI 于 2018 年 12 月 5 日发布第一版本,以其易用性、速度和稳健性在开发者中间迅速流行起来。
  • FastAPI 支持异步编程,可在生产环境中运行。

二.特点

  • 高性能: 基于Starlette和Pydantic,利用异步(asynchronous)编程,提供出色的性能。
  • 自动文档生成: 自动生成交互式API文档,支持Swagger UI和ReDoc,让API的理解和测试更加直观。
  • 类型注解支持: 利用Python的类型提示,提供更严格的输入验证和更好的代码提示。
  • 异步支持: 支持异步请求处理,使得处理IO密集型任务更加高效。

三.适用场景

  • 构建API后端: 用于构建RESTful API,支持前后端分离的Web应用。
  • 微服务架构: 可以作为微服务的后端框架,支持快速开发和部署。
  • 数据处理API: 适用于处理数据,接收和返回JSON数据。
  • 实时通信: 支持WebSocket,适用于实时通信场景。

四.安装

FastAPI 依赖 Python 3.8 及更高版本。

安装 FastAPI 很简单,这里我们使用 pip 命令来安装。

pip install fastapi

另外我们还需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn

pip install "uvicorn[standard]"

五.使用

FastAPI 提供了内置的交互式 API 文档,使开发者能够轻松了解和测试 API 的各个端点。

这个文档是自动生成的,基于 OpenAPI 规范,支持 Swagger UI 和 ReDoc 两种交互式界面。

通过 FastAPI 的交互式 API 文档,开发者能够更轻松地理解和使用 API,提高开发效率

在运行 FastAPI 应用时,Uvicorn 同时启动了交互式 API 文档服务。

默认情况下,通过访问 http://127.0.0.1:8000/docs 来打开 Swagger UI 风格的文档,通过访问 http://127.0.0.1:8000/redoc 来打开 Swagger UI 风格的文档。

下面简单介绍下开发中常见请求的使用方法

5.1 Get请求--不带任何参数

创建一个名为 main.py 的文件,添加以下代码:

from fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"Hello": "FastAPI"}#添加主程序入口,pycharm即可启动运行,下同,不再单独列出if __name__ == "__main__":import uvicornuvicorn.run(app)

 

5.2 Get请求--使用变量作为请求地址的一部分

@app.get("/items/{item_id}")
def read_item(item_id: int,q:Union[str,None]=None):return {"item_id": item_id,"q":q}

该请求接受两个参数:

  • item_id --是路径参数,指定为整数类型。
  • q -- 是查询参数,指定为字符串类型或空(None)。

函数返回一个字典,包含传入的 item_id 和 q 参数。

q 参数通过 Union[str, None] 表示可以是字符串类型或空,这样就允许在请求中不提供 q 参数

返回结果 

 

  5.3 Get请求--将请求参数拼接在地址后面

下面的请求中,提供了默认值,如果参数有提供,则覆盖默认值,否则就使用默认值

@app.get("/items/")
def read_items(skip: int = 0, limit: int = 100):return {"skip": skip, "limit": limit}

 

 5.4 Put请求

from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None# is_offer: Union[bool,None] = None@app.put("/items/{item_id}")
def update_item(item_id:int,item:Item):return {"item_name": item.name,"item_id":item_id}

5.5 Post请求

from pydantic import BaseModelclass Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None@app.post("/items")
def create_item(item:Item):return item

上面请求中返回 Pydantic 模型,路由处理函数返回一个 Pydantic 模型实例,FastAPI 将自动将其转换为 JSON 格式,并作为响应发送给客户端。

Pydantic 是一个用于数据验证和序列化的 Python 模型库。

它在 FastAPI 中广泛使用,用于定义请求体、响应体和其他数据模型,提供了强大的类型检查和自动文档生成功能。

使用 Pydantic 定义一个模型非常简单,只需创建一个继承自 pydantic.BaseModel 的类,并在其中定义字段。字段的类型可以是任何有效的 Python 类型,也可以是 Pydantic 内置的类型

5.6获取请求头和Cookie

from fastapi import FastAPI, Header, Cookie@app.get("/header_and_cookie")
def read_header_and_cookie(user_agent: str = Header(None),session_token: str = Cookie(None)):return {"user_agent":user_agent,"session_token":session_token}

 

 5.7 重定向

from starlette.responses import RedirectResponse@app.get("/redirect")
def redirect():return RedirectResponse(url="/items/1234")

该方法将请求重定向到上面定义的items请求

5.8 抛出异常,返回自定义的状态码和详细信息

from fastapi import HTTPException@app.get("/exception_test/{item_id}")
def exception_test(item_id:int):if item_id <10:raise HTTPException(status_code=404, detail="Item not found")return {"item_id": item_id}

 

5.9 接收表单数据

from fastapi import Form@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):return {"username": username}

 

5.10 文件上传

from fastapi import UploadFile, File@app.post("/files/")
async def upload_file(file: UploadFile = File(...)):return {"filename": file.filename}

 

http://www.xdnf.cn/news/4325.html

相关文章:

  • penEuler操作系统结合豆包测试github仓库8086-Emulator项目
  • react中的用法——setDisabled dva dispatch effects
  • leetcode 160. 相交链表
  • os梳理5——第五章:存储器管理
  • 汽车免拆诊断案例|车辆行驶中急加速车身抖动故障排除 2 例
  • C# NX二次开发:投影曲线和偏置曲线UFUN函数详解
  • Redis--哈希类型
  • 深度学习中的autograd与jacobian
  • C++ 日志系统实战第四步:设计与代码实现详解
  • 从0开始学习大模型--Day03--Agent规划与记忆
  • “胖都来”商标申请可以通过注册不!
  • 如何应对客户在验收后提出新需求?
  • ESP32蓝牙开发笔记(十四)
  • Zsh + iTerm2搭配使用教学,非常舒服,macOS
  • 系统架构-云原生架构设计
  • 14前端项目----登录/注册
  • 【强化学习】#4 蒙特卡洛方法
  • leetcode 70.爬楼梯(c++详细最全解法+补充知识)
  • C++ 备忘录模式详解
  • NVM完全指南:安装、配置与最佳实践
  • 尤雨溪宣布:Vue 生态正式引入 AI
  • 医疗人工智能大模型中的关键能力:【中期训练】mid-training
  • android中的背压问题及解决方案
  • AOP封装进行批量的数据查询并填充
  • shell 脚本
  • Android学习总结之MMKV(代替SharedPreferences)
  • 黑电平校正(Black Level Correction, BLC)算法
  • 【C++】C++中this指针的介绍及使用
  • 实现引用计数线程安全的shared_ptr
  • 从Huggingface下载模型的方法小结