首頁 > 軟體

python中fastapi設定查詢引數可選或必選

2022-06-06 10:00:53

前言:

在fastapi中,我們定義的查詢引數是可以設定成:必選引數 or 可選引數。

可選查詢引數

  • 只要給查詢引數的預設值設定為None,表示該查詢引數是可選引數。
 from fastapi import FastAPI
 ​
 app = FastAPI()​
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q=None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

補充:此時路徑操作函數內的引數有兩個,一個是路徑引數item_id,一個是查詢引數q,fastapi是可以區分他們的。

必選查詢引數

  • 當你為查詢引數設定預設值時,則該引數在URL中不是必須的。
  • 如果你不想新增預設值,而只是想使該引數成為可選的,則將預設值設定為 None
  • 但當你想讓一個查詢引數成為必需的,不宣告任何預設值就可以.
  • 比如:這裡的查詢引數 needy 是型別為 str 的必需查詢引數。
 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
  • 如果在URL中沒有查詢引數needy,則報錯
 {
     "detail": [
         {
             "loc": [
                 "query",
                 "needy"
             ],
             "msg": "field required",
             "type": "value_error.missing"
         }
     ]
 }

可選和必選引數共存

  • 也可以定義一些引數為必需的,一些具有預設值,而某些則完全是可選的
  • 此時:itme_id是路徑引數,needy是必選路徑引數,skip是有預設值必選查詢引數,limit是可選查詢引數。
 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=None
 ):
     item = {"item_id": item_id, "needy": needy, "skip": skip, "limit": limit}
     return item

為可選引數做型別提示

  • 比如一個可選的引數q,如有該引數時,他的型別是整型,此時定義型別提示如下
  • 使用typing模組下的Union做型別提示,Union[int, None]表示型別是int或者None
  • 此時對於URL:http://127.0.0.1:8000/items/12?q=12,引數q就會自動轉化為數位12
 from typing import Union​
 from fastapi import FastAPI
 app = FastAPI()​
 @app.get("/items/{item_id}")
 async def read_item(item_id: str, q: Union[int, None] = None):
     data = {"item_id": item_id}
     if q:
         data["q"] = q
     return data

補充1:

  • 可能為空的情況做型別提示,一般使用一個比typing.Union更加方便的型別:typing.Optional
  • 因為,Optional[X] is equivalent to Union[X, None]
  • 所以,上面的類似等價於q: Optional[int] = None

補充2:

  • 只要給查詢引數預設值None就表示它是可選查詢引數,和型別提示無關。
  • 型別提示的功能在於如果該值存在是他應該是什麼型別的變數並做型別轉換和校驗。

到此這篇關於python中fastapi設定查詢引數可選或必選的文章就介紹到這了,更多相關python fastapi 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com