什么是路径

  • 假设一个 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的更多相关文章

  1. 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 ...

  2. SpringMVC中请求路径参数使用正则表达式

    @GetMapping("/user/{id:\\d+}") //使用正则指定Id为数字 public User getInfo(@PathVariable String id){ ...

  3. FastAPI(7)- get 请求 - 详解 Path

    前言 上一篇讲了可以为查询参数添加额外的校验和元数据,Query 库:https://www.cnblogs.com/poloyy/p/15306809.html 这篇讲可以为路径查询添加额外的校验和 ...

  4. FastAPI 学习之路(八)路径参数和数值的校验

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  5. 请求路径@PathVariable与请求参数@RequestParam的区别

    转自:http://www.iteye.com/problems/101566: http://localhost:8080/Springmvc/user/page.do?pageSize=3& ...

  6. 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据

    1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...

  7. SpringMVC 请求路径结尾存在.使用@PathVariable访问路径内容,路径参数获取不准确的问题

    SpringMVC采用Get方式请求资源时,如果请求路径的结尾中带有小数点(.)时,同时使用@PathVariable访问路径内容时,请求路径中最后一个小数点及其后面的内容会被Spring截断丢弃比如 ...

  8. 同 一个页面,不同请求路径,如何根据实际场景写JS

    场景:使用同一个“添加群成员”的页面来操作 建群页面:建群成功后,返回查看群成员页面.在建群过程中直接添加群成员并返回一个群名称的参数. 添加群成员页面:在巳有群内添加群成员,添加成功后,返回查看群成 ...

  9. node.js之路由,中间件,ge请求和post请求的参数

    一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 1 app.get(" ...

随机推荐

  1. Mybatis源码解析2—— 实例搭建

    大家好,我是可乐. 上篇文章给大家撸了一遍用 JDBC 直接操作数据库的实例,还只是简单写了一个查询的接口,其代码量就已经很大了,并且可乐还给大家分析了直接使用 JDBC 带来的一些问题,总之是一种反 ...

  2. 从官网下载历史版本的java

    下载历史版本的java 因为一些bug需要降低java版本来尝试解决,但是好多都要收费,我就搞不明白了,官网都有免费的我要你的收费软件干嘛 首先直接搜索java,进入Oracle,或者 Java SE ...

  3. Python之简单的神经网络

    from sklearn import datasets from sklearn import preprocessing from sklearn.model_selection import t ...

  4. ubuntu18.4 与pc notepad++ 使用nppftp

    首先在linux上部署 vsftpd 安装过程可能有一些问题.我之前的一个文章有所说明. 然后更改配置文件 vsftpd.conf 最简单是开启匿名登录,有时候还要开启root登录,在user文件里面 ...

  5. Windows下安装RocketMQ

    目录 前言 环境 具体操作 下载 环境变量配置 启动 关闭 生产.消费实例 RocketMQ Console 前言 项目中用到了延迟消息队列,记录下一win10下rocketmq的安装 环境 win1 ...

  6. mysql事务的4大特性

    事务的四大特性(简称ACID) 1.原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做. 2.一致性(Consistency) 事务执行的结果必须是使数据 ...

  7. mpvue学习笔记

    坑一: 挂载在Vue.prototype上的属性,在模板语法里面是undefined,必须经过computed计算过一下才能用. 坑二: 关于生命周期钩子 因为小程序的历史页面不会销毁,所以在生命周期 ...

  8. 5、二进制安装K8s 之 部署kube-scheduler

    二进制安装K8s之部署kube-scheduler 1.创建配置文件 cat > /data/k8s/config/kube-scheduler.conf << EOF KUBE_S ...

  9. Python中的reduce()函数

    reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...

  10. Linux下修改mysql默认最大连接数

    liunx下修改mysql最大连接数(Centos下测试通过)1.查看当前系统下mysql设置的最大连接数方式一.mysqladmin -uroot -p variables |grep max_co ...