持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
路径参数
- 路径参数:在URL中域名或IP:PORT后
/后面的路径就是路径参数,它用来表示一个具体的路径 - 比如下面的例子中
/items/apple和/items/banana就是两个不同的路径参数。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/apple")
async def read_item():
return {"items": ["apple_1", "apple_2"]}
@app.get("/items/banana")
async def read_item():
return {"items": ["banana_1", "banana_2"]}
- 启动服务后,在浏览器访问
127.0.0.1:8000/items/apple就可以得到响应{"items": ["apple_1", "apple_2"]}
动态路径参数
- 动态路径参数:路径参数不是写死对的,其中部分是动态变化的
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"items": item_id}
比如上面例子中,路径装饰器中"/items/{item_id}"的item_id就是可以动态变化的,它可以被替换为任何值
- 你可以使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量"
- 并且路径参数
item_id的值将作为参数item_id传递给路径操作函数 - 所以,如果你访问
http://127.0.0.1:8000/items/foo,将会看到如下响应:{"item_id":"foo"}
有类型的路径参数
- 如果在路径操作函数中定义的参数
item_id没有类型提示,item_id变量都是字符串类型,下面例子中的返回值item_id是字符串。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id):
return {"item_id": item_id}
- 可以使用标准的 Python 类型标注为函数中的路径参数声明类型。
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
-
此时,函数中的参数
item_id为类型为int,将会有如下两个功能:- (1)编辑器有自动补全、类型检查
- (2)浏览器访问
http://127.0.0.1:8000/items/3,此时item_id会自动转化为int类型; - 浏览器访问
http://127.0.0.1:8000/items/foo,将会报错,因为路径参数item_id传入的值为"foo",它不是一个int。
{
"detail": [
{
"loc": [
"path",
"item_id"
],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}
]
}