首页>文档>工单中心>fastapi中文手册:Path参数 & 数值验证

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

fastapi中文手册:Path参数 & 数值验证

fastapi中文手册:Path参数 & 数值验证

FastAPI 是一个高性能 Web 框架,用于构建 API。

主要特性:

  • 快速:非常高的性能,与 NodeJS 和 Go 相当
  • 快速编码:将功能开发速度提高约 200% 至 300%
  • 更少的错误:减少约 40% 的人为错误
  • 直观:强大的编辑器支持,自动补全无处不在,调试时间更少
  • 简易:旨在易于使用和学习,减少阅读文档的时间。
  • 简短:减少代码重复。
  • 稳健:获取可用于生产环境的代码,具有自动交互式文档
  • 基于标准:基于并完全兼容 API 的开放标准 OpenAPI 和 JSON Schema 

与使用 Query 声明查询参数的更多验证和元数据的方法相同,也可以通过Path声明路径参数的相同类型的验证和元数据。

一、Import Path

首先,从fastapi中导入 Path :

from fastapi import FastAPI, Path, Query 

二、声明元数据

你可以声明 Query 中所有参数.

例如,要为路径参数item_id声明一个title元数据值,您可以输入:

item_id: int = Path(..., title="The ID of the item to get"),    q: str = Query(None, alias="item-query")

注意:

  • Path 参数是必须的,因为它是路径的一部分,因此你需要用...声明标志这是必需参数
  • 尽管如此,即使你声明为None或者设置一个默认值,它并不会有什么改变,仍然需要传入路径参数。

三、根据需要为参数排序

假如,你现在想声明一个查询参数q, 该参数为必需参数,类型为str

但是,你并不需要声明q的其他任意属性,这时候你没有必要使用Query

然后,你需要声明一个路径参数item_id

对于Python而言,如果你将一个带有默认值的参数放在一个没有默认值的参数前面。
但是你可以重新为他们排序,将那些没有默认值的参数放在默认值参数前面

但是对于FastAPI 而言,这并没有多大的影响,因为FastAPI通过名字,类型和默认声明去检测参数 (Query, Path, etc),并不关心参数的顺序。

因此,你可以这样定义你的函数:

from fastapi import FastAPI, Path

app = FastAPI()

@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查询参数而不使用Query或任何默认值,并且使用Path声明路径参数item_id并使用不同的顺序,则Python对此有一些特殊的语法。

传递*作为函数的第一个参数。

Python不会对那个*做任何事情,但是它将知道*之后所有参数都应称为关键字参数(键-值对),也称为kwargs 。 即使它们没有默认值。

from fastapi import FastAPI, Path

app = FastAPI()

@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

五、数字验证:大于或等于

使用Query和Path以及后面将介绍的其他方法,您可以声明字符串约束,但也可以声明数字约束。

在这里,当ge = 1时,item_id必须是整数“ g大于或等于e等于1”。

from fastapi import FastAPI, Path

app = FastAPI()

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

六、数字验证器:大于等于或小于或等于

同样适用于:

  • gt: 大于
  • le: 小于等于

from fastapi import FastAPI, Path

app = FastAPI()

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

七、数字验证器:浮点数、大于或小于

数字验证器同样适用于float数值:

在这里,只能声明gt,不能声明ge

与此类似,例如,您可以要求值必须大于“ 0”,即使该值小于“ 1”也是如此。

因此,0,5就是个有效值,但是0.00就不是.

同样的道理对于lt.

from fastapi import FastAPI, Path, Query

app = FastAPI()

@app.get("/items/{item_id}")
async def read_items(
    *,
    item_id: int = Path(..., title="The ID of the item to get", ge=0, le=1000),
    q: str,
 size: float = Query(..., gt=0, lt=10.5) ):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

八、总结

使用 Query, Path (目前为止) 你可以声明元数据和字符串验证(t前面的章节).

你也可以声明数字验证器:

  • gt: 大于
  • ge: 大于等于
  • lt: 小于
  • le: 小于等于
说明

Query, Path 和其他类型,稍后你将会看见是一个公共类Param的子类。

它们都共享您已经看到的附加验证和元数据的所有相同参数。

技术细节

当您从FastAPI中导入QueryPath和其他对象时,它们实际上是函数。

当被调用时,返回同名类的实例。

因此,您将导入Query这个功能。 当您调用它时,它返回一个也称为Query的类的实例。

这些函数在那里(而不是直接使用类),以便您的编辑器不会标记有关其类型的错误。

这样,您可以使用常规的编辑器和编码工具,而不必添加自定义配置来忽略这些错误。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索