什么是路径

  • 假设一个 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. Redis是不是真的变慢了?

    大家好,今天我们来学习一下如何确定Redis是不是真的变慢了. 我们在使用redis时一定会遇到变慢的时候,那我们如何来判断Redis是否真的变慢了呢, 一个最直接的方法就是查看Redis的响应延迟, ...

  2. 【动画消消乐|CSS】083.纯CSS实现卡通齿轮效果

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  3. Redis-缓存穿透/击穿/雪崩

    1. 简介 如图所示,一个正常的请求 客户端请求张铁牛的博客. 服务首先会请求redis,查看请求的内容是否存在. redis将请求结果返回给服务,如果返回的结果有数据则执行7:如果没有数据则会继续往 ...

  4. CAS 5.3使用MySQL数据库验证

    一.本例环境说明 JDK 1.8 CAS 5.3 apache-maven-3.6.0 mysql-5.6.32 二.CAS 5.3基础环境搭建与验证 需要按照<CAS 5.3服务器搭建> ...

  5. sqli-labs lesson 54-65

    less 54 需要从数据库的CHALLENGES表中取出key值输入,输入对了才算通过,但是只能做10次尝试. 这里id被单引号包裹,注意闭合单引号即可,剩下的就可以参照less 1获取表中信息即可 ...

  6. Docker++:docker运行Tomcat后访问首页报404 (永久解决方式)

    docker运行Tomcat后访问首页报404 与 tomcat 版本有关. 解决方式如下: 1.查看防火墙问题 2.Tomcat 下如果有 webapps.dist 和 webapps 则需要进行合 ...

  7. Go优秀开源项目推荐

    前言 本文主要是收集Go语言开发的一些优秀项目和框架,个人见识有限肯定还有很多优秀的项目没有收录的,假如大家有好的Go项目可以在文末留言. Go优秀项目收集仓库 GolangFamily​github ...

  8. 神州战神U盘安装windows10系统,启动项制作好后,在bios中识别不到自己的u盘问题

    我笔记本是神州战神,启动盘做完了后,按快捷键F2,进入boot下进行设置,找了半天没找到自己的u盘,很郁闷,捣鼓了半天才搞定,以下是我修改之后的设置: 1.把Secure Boot设置为disable ...

  9. Windows安装Linux虚拟机(CentOS7)

    一.在电脑上安装虚拟机,百度搜索vmware,下载后傻瓜式安装即可. 二.CentOS下载,阿里云镜像:http://mirrors.aliyun.com/centos/7/isos/x86_64/. ...

  10. Vue2.0 axios 读取本地json文件

    参考:https://www.cnblogs.com/wdxue/p/8868982.html 1.下载插件 npm install axios --save 2.在main.js下引用axios i ...