FastAPI 基礎學習(五) 請求參數


作者:麥克煎蛋   出處: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是可選的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM