这次主要聊聊Fastapi
中,查询参数和路径参数的使用及校校验,Path
是为路径参数声明校验和元数据,而 Query
是 为查询参数声明校验和元数据。
两个的区别就是,路径参数是跟在路径后面的,例如:/path/1
,1
即为路径参数;查询参数是键值对传值,例如:/path/q=1
,q=1
即为查询参数
介绍完后,下面进入实例操作环节…
查询参数和字符串校验
查询参数校验
FastAPI
允许参数声明额外的信息和校验,以下面的应用程序为例:
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/items")
def read_items(q: Optional[str] = None):
"""
:param q:
:return:
"""
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
上述实例是设置了查询参数q
,设置的类型为str
,默认值为None
。Optional
是用于定义为可选参数,所以此时的q
为可选参数,请求时可传可不传。
根据上述实例继续增加额外的校验,也就是增加一个约束条件。增加后的应用程序为例如下:
from typing import Optional
from fastapi import FastAPI
from fastapi import Query
app = FastAPI()
@app.get("/items_check")
def read_items_check(q: Optional[str] = Query(None, min_length=3, max_length=5)):
"""
约束条件,校验查询参数的长度
:param q:
:return:
"""
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
上述实例中的使用Query(None)
替换默认值None
,Query
的第一个参数同样也是用于定义默认值。
所以:
q: str = Query(None)
等同于:
q: str = None
也等同于:
q: Optional[str] = None
Query()
主要是将其参数声明为查询参数,可以将更多的参数传递给Query()
中:
q: Optional[str] = Query(None, min_length=3, max_length=5)
注释信息:
max_length
:设置q
参数的值,长度最大为10
min_length
:设置q
参数的值,长度最小为3
请求接口:
http://127.0.0.1:8000/items_check?q=1
{
"detail": [{
"loc": ["query", "q"],
"msg": "ensure this value has at least 3 characters",
"type": "value_error.any_str.min_length",
"ctx": {
"limit_value": 3
}
}]
}
或请求接口:
http://127.0.0.1:8000/items_check?q=111111
{
"detail": [{
"loc": ["query", "q"],
"msg": "ensure this value has at most 5 characters",
"ty