fastapi 查询参数和字符串校验 / 路径参数和数值校验

简介: fastapi 查询参数和字符串校验 / 路径参数和数值校验

文章目录

1. 约束限制

2. 必须参数

3. 查询参数列表 / 多个值

4. 声明更多元数据

5. 别名参数

6. 弃用参数

7. Path 路径参数

8. 按需对参数排序

learn from https://fastapi.tiangolo.com/zh/tutorial/query-params-str-validations/


1. 约束限制

from typing import Optional
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: Optional[str] = Query(None, max_length=50)):
    res = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        res.update({"q":q})
    return res

Query(None, max_length=50) 显示声明为查询参数,默认为 None, 最大长度50

image.png

32.png

  • 更多限制 Query(None, min_length=3, max_length=50)
  • 正则限制 Query(None, min_length=3, max_length=50, regex="^fixedquery"), 以 ^ 后面的字符开头
  • 33.png

注意 None 是默认值,也可以是其它默认值,改参数是可选的


2. 必须参数


将 默认值替换成 ...

q: Optional[str] = Query(..., min_length=3, max_length=50, regex="^fixedquery$")

3. 查询参数列表 / 多个值

添加 List[str],q: Optional[List[str]] = Query(None)


http://127.0.0.1:8000/items/?q=123456&q=7890&q=hahha


在没有任何给定值时,赋予默认值 q: Optional[List[str]] = Query(["mike","jason"]

image.pngimage.png


4. 声明更多元数据


  • 添加 titledescription
async def read_items(q: list = Query(["mike","jason"], 
        title="查询字符串", 
        description="查询匹配的item",
    )
):
    res = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    if q:
        res.update({"q":q})
    return res


5. 别名参数

你需要在浏览器里使用 参数 item-good,但是 python 不支持 - 作为变量名


q: Optional[str] = Query(None, alias = "item-good")

image.png

6. 弃用参数

将参数 deprecated=True 传入 Query

image.png

7. Path 路径参数

from fastapi import Path
@app.get("/items/{item_id}")
async def read_items(item_id:int = Path(..., title="the id of the item"),
                    q : Optional[str] = Query(None, alias="item-query")):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

image.png


限制大小 item_id:int = Path(..., title="the id of the item", ge=23, le=24),[23.0, 24.0] 之间的 int

路径参数总是 必需的


8. 按需对参数排序

fastapi image.png会自动根据 参数的名称、类型和默认值声明(Query、Path 等)来检测参数

from fastapi import Path
@app.get("/items/{item_id}")
async def read_items(
    q: str, item_id: int = Path(..., title="The ID of the item to get, hha", 
                  description="my description")
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

image.pngimage.png

@app.get("/items/{item_id}")
async def read_items(
    q:str, item_id: int = Path(..., title="The ID of the item to get")
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

对上面的代码,参数 q,item_id 的顺序如果调换了,会报错

 item_id: int = Path(..., title="The ID of the item to get"), q: str
    ^
SyntaxError: non-default argument follows default argument

加入第一个参数 *,表示让后面的所有参数作为键值对参数

@app.get("/items/{item_id}")
async def read_items(
    *, item_id: int = Path(..., title="The ID of the item to get"), q:str
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results
相关文章
|
数据采集 JSON JavaScript
全面拥抱FastApi —三大参数及验证
全面拥抱FastApi —三大参数及验证
|
开发框架 JSON API
Python中FastAPI项目使用 Annotated的参数设计
Python中FastAPI项目使用 Annotated的参数设计
|
Python
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
Fastapi进阶用法,路径参数,路由分发,查询参数等详解
1125 1
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
前端开发 中间件 API
FastAPI第二天---参数校验
FastAPI第二天---参数校验
316 0
FastAPI第二天---参数校验
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
|
存储 测试技术 数据安全/隐私保护
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
FastAPI(八十三)实战开发《在线课程学习系统》--注册接口单元测试
|
测试技术 数据安全/隐私保护
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(上)
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
FastAPI(八十二)实战开发《在线课程学习系统》接口开发-- 课程上架下架
|
NoSQL Redis 数据库
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞
FastAPI(八十一)实战开发《在线课程学习系统》接口开发-- 推荐课程列表与课程点赞

热门文章

最新文章