与使用 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.0或0就不是.
同样的道理对于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中导入Query,Path和其他对象时,它们实际上是函数。
当被调用时,返回同名类的实例。
因此,您将导入Query这个功能。 当您调用它时,它返回一个也称为Query的类的实例。
这些函数在那里(而不是直接使用类),以便您的编辑器不会标记有关其类型的错误。
这样,您可以使用常规的编辑器和编码工具,而不必添加自定义配置来忽略这些错误。












网友评论