FastAPI-查询参数声明额外的校验

通用校验和元数据

  • alias: 别名,提供一个简短或更易理解的名称作为字段或参数的替代标识。这有助于提高代码或文档的可读性。
  • title:标题,对字段或参数功能的简短描述,常用于自动生成的文档中,便于用户快速了解其用途。
  • description:描述,提供详细信息说明字段或参数的作用、取值要求、应用场景等,帮助开发者和用户更好地理解和使用。
  • deprecated:废弃,标记该字段或参数已不再推荐使用,并可能在未来的版本中移除。提示开发者应避免使用并寻找替代方案。

特定于字符串的校验

  • min_length:最小长度,指定字符串类型的字段或参数必须至少包含的字符数量。低于此限制则校验不通过。
  • max_length:最大长度,限定字符串类型的字段或参数允许的最大字符数量。超过此限制则不符合要求。
  • regex:正则表达式,定义字符串必须符合的模式或格式。可以用来检查字符串是否遵循特定的格式,如电子邮件地址电话号码日期格式等。不符合正则表达式的字符串将被视为无效。

这些校验规则在设计API、数据库表结构或编写验证逻辑时非常重要,能够帮助开发者提前预防错误输入,保证系统的健壮性和数据的一致性

举例:

from typing import Union
import uvicorn
from fastapi import FastAPI, Query

# 初始化FastAPI应用程序
app = FastAPI()

# 定义一个路由,用于获取项目列表
@app.get("/items/")
async def read_items(
    q: Union[str, None] = Query(
        default=None,
        alias="item-query",
        title="Query string",
        description="Query string for the items to search in the database that have a good match",
        min_length=3,
        max_length=50,
        pattern="^fixedquery$",
        deprecated=True,
    ),
):
    """
    异步函数,用于处理获取项目列表的请求。

    参数:
    - q: 查询字符串参数,用于筛选项目。该参数是可选的,当提供时,必须是一个长度在3到50之间的字符串,并且必须匹配模式"^fixedquery$"。此参数已被标记为弃用。

    返回:
    - 一个包含项目列表和查询字符串(如果提供)的字典。
    """
    # 默认的返回结果包含两个固定的项目
    results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
    # 如果提供了查询字符串q,则将其添加到返回结果中
    if q:
        results.update({"q": q})
    return results

# 主函数,用于启动FastAPI应用程序
if __name__ == "__main__":
    ## 线上模式
    # uvicorn.run("abr_server:app", host="0.0.0.0", port = 1213)

    ## debug 模式
    uvicorn.run("test2:app", host="0.0.0.0", port=1215, reload=True, )
### 定义和使用查询参数FastAPI 应用中,可以通过简单的方式定义并处理查询参数。当创建路径操作函数时,在函数签名中声明期望接收的查询参数名称即可[^1]。 对于基本类型的查询参数,只需按照如下方式编写: ```python from fastapi import FastAPI, Query app = FastAPI() @app.get("/items/") async def read_items(q: str | None = Query(default=None)): results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]} if q: results.update({"q": q}) return results ``` 上述代码展示了如何接受可选字符串形式的查询参数 `q` 。如果请求包含了这个参数,则会将其加入返回的结果字典里;如果没有提供此参数,默认情况下不会影响其他逻辑执行流程。 为了使 API 更加健壮,可以利用 Pydantic 提供的数据验证功能来增强对输入数据的要求。比如设置默认值、限定长度范围或者强制必填等约束条件[^3]: ```python from typing import Optional from pydantic import BaseModel, Field class ItemQuery(BaseModel): q: Optional[str] = Field( title="The query string", max_length=50, description="A query parameter used to filter items." ) @app.get("/items/with_validation") def get_item(item_query: ItemQuery): return item_query.dict() ``` 这里定义了一个名为 `ItemQuery` 的类继承自 `BaseModel` ,并通过 `Field()` 方法指定了关于字段 `q` 的额外元信息以及一些限制规则。之后可以在路由处理器内部直接作为依赖注入项传入实例对象来进行解析与校验工作。 #### 支持列表型查询参数 有时可能希望允许客户端传递多个相同名字的查询参数值形成数组结构。这同样很容易实现: ```python from typing import List @app.get("/items/multi_q") async def multi_qs(queries: List[str] = Query([])): query_items = {"queries": queries} return query_items ``` 这段代码片段表明了怎样让应用程序能够理解像 `/items/multi_q?q=item1&q=item2` 这样的 URL 并正确地收集所有的 `q` 参数到一个列表里面去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值