FastAPI(4)- get 请求 - 路径参数 Path Parameters
什么是路径
- 假设一个 url 是: http://127.0.0.1:8080/items/abcd
- 那么路径 path 就是 /items/abcd
路径参数
就是将路径上的某一部分变成参数,可通过请求传递,然后 FastAPI 解析
最简单的栗子
import uvicorn
from fastapi import FastAPI app = FastAPI() # 路径参数 item_id
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id} if __name__ == '__main__':
uvicorn.run(app="2_get:app", host="127.0.0.1", port=8080, reload=True, debug=True)
postman 请求结果
限定类型的路径参数
# 指定类型的路径参数
@app.get("/items/{item_id}/article/{num}")
async def path_test(item_id: str, num: int):
return {"item_id": item_id, "num": num}
多个路径参数,且有指定类型
正确传参的请求结果
123 传进来的时候是字符串,但 FastAPI 会自动解析转换成 int,如果转换失败就会报错
num 不传 int 的请求结果
友好的错误提示类型不对
Swagger 接口文档的显示效果
路径函数顺序问题
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"} @app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id}
/users/{user_id} 路径是包含 /users/me 的
当想匹配到固定路径时,需要将固定路径函数放在路径参数函数前面
postman 请求结果
将两个函数顺序换过来
@app.get("/users/{user_id}")
async def read_user(user_id: str):
return {"user_id": user_id} # 顺序问题
@app.get("/users/me")
async def read_user_me():
return {"user_id": "the current user"}
这样就无法匹配到固定路径 /users/me 的函数了
路径转换器
前言
- 当你有一个路径是 /files/{file_path} ,但是不确定 file_path 到底会取什么值,并不是固定的长度,可能是 /files/home/johndoe/myfile.txt 也可能是 /files/test/myfile.txt ,那怎么办呢?
- 路径转换器出来啦!
实际栗子
# 路径转换器
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {"file_path": file_path}
postman 请求结果
枚举类型的路径参数
# 导入枚举类
from enum import Enum # 自定义枚举类
class ModelName(Enum):
polo = "polo"
yy = "yy"
test = "test" @app.get("/models/{model_name}")
# 类型限定为枚举类
async def get_model(model_name: ModelName):
# 取枚举值方式一
if model_name == ModelName.polo:
return {"model_name": model_name, "message": "oh!!polo!!"} # 取枚举值方式二
if model_name.value == "yy":
return {"model_name": model_name, "message": "god!!yy"} return {"model_name": model_name, "message": "巴拉巴拉"}
参数传枚举值的请求结果
参数传非枚举值的请求结果
错误提示传的参数值并不是枚举类中的值
重点:路径参数可以不传吗?
先说答案,不行!路径参数是必传参数
实际栗子
# 路径参数 item_id
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
假设不传 item_id
总结
路径参数是请求路径的一部分,如果不传,请求的是另一个路径,如果不存在就会 404
FastAPI(4)- get 请求 - 路径参数 Path Parameters的更多相关文章
- FastAPI(5)- get 请求 - 查询参数 Query Parameters
什么是查询参数? http://127.0.0.1:8000/get?name=xxx&age=18 http://127.0.0.1:8000/get?age=18&name=xxx ...
- SpringMVC中请求路径参数使用正则表达式
@GetMapping("/user/{id:\\d+}") //使用正则指定Id为数字 public User getInfo(@PathVariable String id){ ...
- FastAPI(7)- get 请求 - 详解 Path
前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和 ...
- FastAPI 学习之路(八)路径参数和数值的校验
系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...
- 请求路径@PathVariable与请求参数@RequestParam的区别
转自:http://www.iteye.com/problems/101566: http://localhost:8080/Springmvc/user/page.do?pageSize=3& ...
- 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据
1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...
- SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题
SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃比如 ...
- 同 一个页面,不同请求路径,如何根据实际场景写JS
场景:使用同一个“添加群成员”的页面来操作 建群页面:建群成功后,返回查看群成员页面.在建群过程中直接添加群成员并返回一个群名称的参数. 添加群成员页面:在巳有群内添加群成员,添加成功后,返回查看群成 ...
- node.js之路由,中间件,ge请求和post请求的参数
一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 1 app.get(" ...
随机推荐
- Mybatis源码解析2—— 实例搭建
大家好,我是可乐. 上篇文章给大家撸了一遍用 JDBC 直接操作数据库的实例,还只是简单写了一个查询的接口,其代码量就已经很大了,并且可乐还给大家分析了直接使用 JDBC 带来的一些问题,总之是一种反 ...
- 从官网下载历史版本的java
下载历史版本的java 因为一些bug需要降低java版本来尝试解决,但是好多都要收费,我就搞不明白了,官网都有免费的我要你的收费软件干嘛 首先直接搜索java,进入Oracle,或者 Java SE ...
- Python之简单的神经网络
from sklearn import datasets from sklearn import preprocessing from sklearn.model_selection import t ...
- ubuntu18.4 与pc notepad++ 使用nppftp
首先在linux上部署 vsftpd 安装过程可能有一些问题.我之前的一个文章有所说明. 然后更改配置文件 vsftpd.conf 最简单是开启匿名登录,有时候还要开启root登录,在user文件里面 ...
- Windows下安装RocketMQ
目录 前言 环境 具体操作 下载 环境变量配置 启动 关闭 生产.消费实例 RocketMQ Console 前言 项目中用到了延迟消息队列,记录下一win10下rocketmq的安装 环境 win1 ...
- mysql事务的4大特性
事务的四大特性(简称ACID) 1.原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做. 2.一致性(Consistency) 事务执行的结果必须是使数据 ...
- mpvue学习笔记
坑一: 挂载在Vue.prototype上的属性,在模板语法里面是undefined,必须经过computed计算过一下才能用. 坑二: 关于生命周期钩子 因为小程序的历史页面不会销毁,所以在生命周期 ...
- 5、二进制安装K8s 之 部署kube-scheduler
二进制安装K8s之部署kube-scheduler 1.创建配置文件 cat > /data/k8s/config/kube-scheduler.conf << EOF KUBE_S ...
- Python中的reduce()函数
reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...
- Linux下修改mysql默认最大连接数
liunx下修改mysql最大连接数(Centos下测试通过)1.查看当前系统下mysql设置的最大连接数方式一.mysqladmin -uroot -p variables |grep max_co ...