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

FastAPI入门:demo、路径参数、查询参数

demo

from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def root():return {"message": "Hello World"}

在终端运行

fastapi dev main.py

结果如下:
在这里插入图片描述
打开http://127.0.0.1:8000:
在这里插入图片描述
交互式API文档:位于http://127.0.0.1:8000/docs
在这里插入图片描述
可选的API文档:位于http://127.0.0.1:8000/redoc
在这里插入图片描述

路径参数

FastAPI 支持使用 Python 字符串格式化语法声明路径参数(变量)

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id):return {"item_id": item_id}

这段代码把路径参数 item_id 的值传递给路径函数的参数 item_id
在这里插入图片描述
路径有顺序之分。例如要使用 /users/me 获取当前用户的数据。然后还要使用 /users/{user_id},通过用户 ID 获取指定用户的数据。
由于路径操作是按顺序依次运行的,因此,一定要在 /users/{user_id} 之前声明 /users/me

预设值

路径操作可以使用 Python 的 Enum 类型接收预设的路径参数

class ModelName(str, Enum):# 多重继承,继承str和Enumalexnet = "alexnet"resnet = "resnet"lenet = "lenet"

包含路径的路径参数

在结尾加上:path表示匹配的是路径

from fastapi import FastAPIapp = FastAPI()@app.get("/files/{file_path:path}")
async def read_file(file_path: str):return {"file_path": file_path}

查询参数

声明的参数不是路径参数时,路径操作函数会把该参数自动解释为查询参数。

可选参数

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None, short: bool = False):item = {"item_id": item_id}if q:item.update({"q": q})if not short:item.update({"description": "This is an amazing item that has a long description"})return item

将参数默认值设为None即声明可选参数.不声明默认值均为必选参数

布尔类型参数

FastAPI 会按照以下规则进行转换:

转换为 True 的值:
“true” (不区分大小写)
“True”
“TRUE”
“1”
“yes”
“on”
转换为 False 的值:
“false” (不区分大小写)
“False”
“FALSE”
“0”
“no”
“off”
参数不存在时 (使用默认值 False)

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id: str, q: str | None = None, short: bool = False):item = {"item_id": item_id}if q:item.update({"q": q})if not short:item.update({"description": "This is an amazing item that has a long description"})return item

多个路径和查询参数

FastAPI 可以识别同时声明的多个路径参数和查询参数。而且声明查询参数的顺序并不重要。
FastAPI 通过参数名进行检测:

from fastapi import FastAPIapp = FastAPI()@app.get("/users/{user_id}/items/{item_id}")
async def read_user_item(user_id: int, item_id: str, q: str | None = None, short: bool = False
):item = {"item_id": item_id, "owner_id": user_id}if q:item.update({"q": q})if not short:item.update({"description": "This is an amazing item that has a long description"})return item

访问:http://127.0.0.1:8000/users/1/items/4?q=4&short=0
在这里插入图片描述

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

相关文章:

  • 【图像理解进阶】如何在自己的数据集上释放segment anything模型方案的潜力?
  • 【GaussDB】构建一个GaussDB的Docker镜像
  • MySQL数据库本地迁移到云端完整教程
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • 虚拟直线阈值告警人员计数算法暑期应用
  • MySQL性能优化配置终极指南
  • 【深基12.例1】部分背包问题 Java
  • 二分查找-268.丢失的数字-力扣(LeetCode)
  • ABP VNext + Razor 邮件模板:动态、多租户隔离、可版本化的邮件与通知系统
  • java面试题1
  • IOPaint 图像修复工具,学习笔记
  • openmv识别数字
  • 质数、因数、最大公约数经典问题整理
  • KNN 算法进阶:从基础到优化的深度解析
  • lesson24:Python的logging模块
  • 将文件移入回收站而不是直接删除
  • 7月25号打卡
  • 太极生两仪,两仪生四象,四象生八卦
  • 13.使用C连接mysql
  • Windows Server 2003 R2系统C盘扩容教程
  • 【深度学习新浪潮】Claude code是什么样的一款产品?
  • 【Linux系统】基础IO(下)
  • 常见问题三
  • linux 进程信号
  • 佳能iR-ADV C5560复印机如何扫描文件到电脑
  • Gorm教程 - 关联
  • 电厂液压执行器自动化升级:Modbus TCP与DeviceNet的协议贯通实践
  • 微观低代码
  • SpringBoot实战指南:从快速入门到生产级部署(2025最新版)
  • 【运维】ubuntu 安装图形化界面