作者:麥克煎蛋 出處:https://www.cnblogs.com/mazhiyong/ 轉載請保留這段聲明,謝謝!
一、請求參數
from fastapi import FastAPI app = FastAPI() fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}]
@app.get("/items/")
async def read_item(skip: int = 0, limit: int = 10):
return fake_items_db[skip : skip + limit]
如上述,如果函數里的參數不是路徑參數的一部分,那么這樣的參數就自動被解釋為請求參數。
請求參數就是URL中問號('?')后面以'&'間隔開的鍵值對,它們是URL的一部分,並且參數類型都是字符串類型。
http://127.0.0.1:8000/items/?skip=0&limit=10
在上面的這個URL中,請求參數分別是:
skip:值是0
limit:值是10
FastAPI中所有適用於路徑參數的功能也同樣適用於請求參數,例如:
- 編輯器支持
- 數據自動解析
- 數據自動校驗
- 自動化文檔
二、請求參數缺省值
請求參數在URL路徑中並不是固定不變的,它們是可選的,並且也可以有缺省值。
from fastapi import FastAPI app = FastAPI() fake_items_db = [{"item_name": "Foo"}, {"item_name": "Bar"}, {"item_name": "Baz"}] @app.get("/items/") async def read_item(skip: int = 0, limit: int = 10): return fake_items_db[skip : skip + limit]
在這個例子中,skip和limit都是有缺省值的。因此,下面URL的請求是等同的:
http://127.0.0.1:8000/items/
等同於
http://127.0.0.1:8000/items/?skip=0&limit=10
但如果你訪問:
http://127.0.0.1:8000/items/?skip=20
那么實際的請求參數就是:
skip=20
limit=10
三、可選請求參數
我們可以聲明請求參數是可選的,只要設置參數的缺省值為None。
from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_item(item_id: str, q: str = None): if q: return {"item_id": item_id, "q": q} return {"item_id": item_id}
在這個例子中,參數q就是可選的,缺省為None。
同時在這個例子中,我們可以注意到,FastAPI可以非常智能的識別參數種類,這里參數item_id是一個路徑參數,而參數q是一個請求參數。
四、多路徑參數、多請求參數
你可以同時聲明多個路徑參數、多個請求參數,並且不用考慮聲明順序。FastAPI可以准確無誤的識別參數類型。
from fastapi import FastAPI app = FastAPI() @app.get("/users/{user_id}/items/{item_id}") async def read_user_item( user_id: int, item_id: str, q: str = None, short: bool = False ): item = {"item_id": item_id, "owner_id": user_id} if q: item.update({"q": q}) if not short: item.update( {"description": "This is an amazing item that has a long description"} ) return item
五、必選請求參數
如果一個請求參數沒有被設置任何缺省值(包括None),那么它就是必選的。
from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_user_item(item_id: str, needy: str): item = {"item_id": item_id, "needy": needy} return item
如果我們沒有攜帶請求參數needy,而是直接訪問:
http://127.0.0.1:8000/items/foo-item
那么我們就會看到如下的錯誤信息:
{ "detail": [ { "loc": [ "query", "needy" ], "msg": "field required", "type": "value_error.missing" } ] }
當然了,我們也可以聲明有的參數是必選的,有的參數是有缺省值的,而有的參數是完全可選的。
from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def read_user_item(item_id: str, needy: str, skip: int = 0, limit: int = None): item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit} return item
在這個例子中的請求參數中,needy是必選的,skip是有缺省值的,而limit是可選的。