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

fastApi笔记01-路径参数

路径参数

使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量"

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

http://127.0.0.1:8000/items/foo

路径中变量名与方法中的参数名一致时,会认为这个参数是路径参数。

请求路径里面的值就是路径参数的值。比如上面请求路径items/foo。foo就是read_item()方法item_id这个路径参数的值

有类型的路径参数

使用标准的python类型标注为函数中的路径参数声明类型,为函数提供编辑器支持,包括错误检查、代码补全等

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

数据校验

通过python类型声明,FastApi提供了数据校验

这时候再访问http://127.0.0.1:8000/items/foo会报错,提示路径参数item_id,应该是个int类型,但是使用了str类型。

数据转换

http://127.0.0.1:8000/items/3这时返回的item_id的值是int类型的3

FastAPI 通过上面的类型声明提供了对请求的自动"解析",将来自http请求中的字符串转换成了int

预设值

如果你有一个接收路径参数的路径操作,但你希望预先设定可能的有效参数值,则可以使用标准的 Python Enum 类型。

from enum import Enumfrom fastapi import FastAPIclass ModelName(str, Enum):  # 通过继承str,API文档会知道这些枚举必须全都是string类型al = "test"re = "test11"le = "test222"app = FastAPI()@app.get("/models/{model_name}")
def get_model(model_name: ModelName):  # 使用定义的枚举类创建一个带有类型标注的路径参数if model_name is ModelName.al:  # 比较枚举成员return {"model_name": model_name, "message": "Deep Learning FTW!"}if model_name.value == "test222":  # 获取枚举值来比较return {"model_name": model_name, "message": "LeCNN all the images"}return {"model_name": model_name, "message": "Have some residuals"}

get_model()函数中model_name这个路径参数定义的类型是ModelName这个枚举类。

在请求时,使用对应枚举的值,比如models/test。但是在get_mode这个方法处理时,test会转换成对应的枚举al。

相关文章:

  • 分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测
  • 外贸消息多发工具开发常用源代码!
  • JSON语法
  • 【Nginx】Nginx配置反向代理 和 https
  • ApexRBp在线粒子传感器在电动汽车电池制造的应用
  • 微服务篇之分布式系统理论
  • UnityWebGL 设置全屏
  • 设计模式复习
  • Java架构师之路四、分布式系统:分布式架构、分布式数据存储、分布式事务、分布式锁、分布式缓存、分布式消息中间件、分布式存储等。
  • WooCommerce商品采集与发布插件
  • 缩小ppt文件大小的办法
  • C#_各式各样的参数(引用参数、输出参数、数组参数、具名参数、可选参数)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • 航空领域中气象常识笔记
  • 什么是跨模态
  • CentOS 7 防火墙操作
  • idea + plantuml 画流程图
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • mysql中InnoDB引擎中页的概念
  • PHP 小技巧
  • Python_网络编程
  • vue.js框架原理浅析
  • Wamp集成环境 添加PHP的新版本
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 阿里云购买磁盘后挂载
  • 第十八天-企业应用架构模式-基本模式
  • 仿天猫超市收藏抛物线动画工具库
  • 搞机器学习要哪些技能
  • 批量截取pdf文件
  • 前端性能优化--懒加载和预加载
  • 为什么要用IPython/Jupyter?
  • 优化 Vue 项目编译文件大小
  • 主流的CSS水平和垂直居中技术大全
  • 阿里云ACE认证学习知识点梳理
  • 交换综合实验一
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 飞书APP集成平台-数字化落地
  • #HarmonyOS:基础语法
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (第一天)包装对象、作用域、创建对象
  • (动态规划)5. 最长回文子串 java解决
  • (二)WCF的Binding模型
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)四层和七层负载均衡的区别
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net程序集学习心得