• FastAPI7参数额外的校验


    额外的校验

    我们打算添加约束条件:即使 q 是可选的,但只要提供了该参数,则该参数值不能超过50个字符的长度

    导入 Query

    为此,首先从 fastapi 导入 Query

    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)):
        results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
        if q:
            results.update({"q": q})
        return results

    使用 Query 作为默认值

    现在,将 Query 用作查询参数的默认值,并将它的 max_length 参数设置为 50:

    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)):
        results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
        if q:
            results.update({"q": q})
        return results

    但是 Query 显式地将其声明为查询参数。

    然后,我们可以将更多的参数传递给 Query。在本例中,适用于字符串的 max_length 参数:

    q: str = Query(None, max_length=50)

    将会校验数据,在数据无效时展示清晰的错误信息,并在 OpenAPI 模式的路径操作中记录该参​​数。

    添加正则表达式

    你可以定义一个参数值必须匹配的正则表达式

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

    默认值

    你可以向 Query 的第一个参数传入 None 用作查询参数的默认值,以同样的方式你也可以传递其他默认值。

    from fastapi import FastAPI, Query
    
    app = FastAPI()
    
    
    @app.get("/items/")
    async def read_items(q: str = Query("fixedquery", min_length=3)):
        results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
        if q:
            results.update({"q": q})
        return results

    声明为必需参数

    当你在使用 Query 且需要声明一个值是必需的时,可以将 ... 用作第一个参数值:

    from fastapi import FastAPI, Query
    
    app = FastAPI()
    
    
    @app.get("/items/")
    async def read_items(q: str = Query(..., min_length=3)):
        results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
        if q:
            results.update({"q": q})
        return results

    声明更多元数据

    你可以添加 title

    以及 description

    from typing import Optional
    
    from fastapi import FastAPI, Query
    
    app = FastAPI()
    
    
    @app.get("/items/")
    async def read_items(
        q: Optional[str] = Query(
            None,
            title="Query string",
            description="Query string for the items to search in the database that have a good match",
            min_length=3,
        )
    ):
        results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
        if q:
            results.update({"q": q})
        return results

  • 相关阅读:
    <cf>Square
    运算符重载
    HDU 1231 最大连续子序列
    Biorhythms(poj1006)
    友元和友元函数
    <poj 1046>Color Me Less
    <cf> Funky Numbers
    VC++中窗口的最大化问题
    励志文章,没事看一下(网上摘录)
    VC多线程编程(转)
  • 原文地址:https://www.cnblogs.com/tarzen213/p/15847069.html
Copyright © 2020-2023  润新知