FastAPI(7)- 详解 Path(下)

简介: FastAPI(7)- 详解 Path(下)

查看 Swagger API 文档,并运行

image.png


直接在 Swagger API 文档上尝试运行也会报错,所以路径参数不要用别名哦!

 

 

函数参数排序问题


image.png


Python 会将 item_id: int = Path(...) 识别为默认参数,而 q: str 是位置参数,而位置参数不能在默认参数后面,所以爆红了

 

解决方案

在 Python 3.8 新除了仅限关键字参数:https://www.cnblogs.com/poloyy/p/15106522.html

@app.get("/item/{item_id}")
async def read_items(
        *,
        item_id: int = Path(...),
        name: str):
    return {"item_id": item_id, "name": name}


将 * 作为第一个参数,那么 * 后面的所有参数都会当做关键字参数处理,即使它们没有设置默认值(像 name)

 

正常传参的请求结果

image.png


数字类型校验


Query 和 Path 都可以添加数字校验,Query 文章并没有讲解数字校验,所以这里重点讲下

 

数字校验参数

# 大于
gt: Optional[float] = None
# 大于等于
ge: Optional[float] = None
# 小于
lt: Optional[float] = None
# 小于等于
le: Optional[float] = None


实际代码

@app.get("/number/{item_id}")
async def read_items(
        *,
        item_id: int = Path(..., title="The IDsss", gt=10, le=20),
        name: str = None):
    return {"item_id": item_id, "name": name}


校验成功的请求结果

image.png

校验失败的请求结果


image.png


Query 和 Path 综合使用


@app.get("/path_query/{item_id}")
async def read_items(
        *,
        item_id: int = Path(..., description="path", ge=1, lt=5, example=1),
        name: str,
        age: float = Query(..., description="query", gt=0.0, le=10)):
    return {"item_id": item_id, "age": age, "name": name}


正确传参的请求结果

image.png

注意

数字校验也可以适用于 float 类型的值

 

查看 Swagger API 文档


image.png


这里的 item_id 还加了个 example 参数,就是个示例值,所以在接口文档中会显示 Example

 

总结


  • Query、Path 和后面会讲到的 Form、Cookie...等等,都是公共 Param 类的子类,但实际开发中并不会直接使用 Param 类
  • 所有这些子类都共享相同的额外校验参数和元数据

 

Query 类

image.png

Path 类

image.png

Param 类

image.png


相关文章
FastAPI(7)- 详解 Path(上)
FastAPI(7)- 详解 Path(上)
211 0
FastAPI(7)- 详解 Path(上)
FastAPI(4)- 路径参数 Path Parameters (下)
FastAPI(4)- 路径参数 Path Parameters (下)
152 0
FastAPI(4)- 路径参数 Path Parameters (下)
FastAPI(4)- 路径参数 Path Parameters (上)
FastAPI(4)- 路径参数 Path Parameters (上)
174 0
FastAPI(4)- 路径参数 Path Parameters (上)
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(八十)实战开发《在线课程学习系统》接口开发-- 课程列表
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程
FastAPI(七十九)实战开发《在线课程学习系统》接口开发-- 加入课程和退出课程