python中fastapi設(shè)置查詢參數(shù)可選或必選
前言:
在fastapi中,我們定義的查詢參數(shù)是可以設(shè)置成:必選參數(shù) or 可選參數(shù)。
可選查詢參數(shù)
- 只要給查詢參數(shù)的默認(rèn)值設(shè)置為
None
,表示該查詢參數(shù)是可選參數(shù)。
?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
補(bǔ)充:此時(shí)路徑操作函數(shù)內(nèi)的參數(shù)有兩個(gè),一個(gè)是路徑參數(shù)
item_id
,一個(gè)是查詢參數(shù)q
,fastapi是可以區(qū)分他們的。
必選查詢參數(shù)
- 當(dāng)你為查詢參數(shù)設(shè)置默認(rèn)值時(shí),則該參數(shù)在URL中不是必須的。
- 如果你不想添加默認(rèn)值,而只是想使該參數(shù)成為可選的,則將默認(rèn)值設(shè)置為
None
。 - 但當(dāng)你想讓一個(gè)查詢參數(shù)成為必需的,不聲明任何默認(rèn)值就可以.
- 比如:這里的查詢參數(shù)
needy
是類(lèi)型為str
的必需查詢參數(shù)。
?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中沒(méi)有查詢參數(shù)
needy
,則報(bào)錯(cuò)
?{ ? ? "detail": [ ? ? ? ? { ? ? ? ? ? ? "loc": [ ? ? ? ? ? ? ? ? "query", ? ? ? ? ? ? ? ? "needy" ? ? ? ? ? ? ], ? ? ? ? ? ? "msg": "field required", ? ? ? ? ? ? "type": "value_error.missing" ? ? ? ? } ? ? ] ?}
可選和必選參數(shù)共存
- 也可以定義一些參數(shù)為必需的,一些具有默認(rèn)值,而某些則完全是可選的
- 此時(shí):
itme_id
是路徑參數(shù),needy
是必選路徑參數(shù),skip
是有默認(rèn)值必選查詢參數(shù),limit
是可選查詢參數(shù)。
?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
為可選參數(shù)做類(lèi)型提示
- 比如一個(gè)可選的參數(shù)
q
,如有該參數(shù)時(shí),他的類(lèi)型是整型,此時(shí)定義類(lèi)型提示如下 - 使用
typing
模塊下的Union
做類(lèi)型提示,Union[int, None]
表示類(lèi)型是int
或者None
- 此時(shí)對(duì)于URL:
http://127.0.0.1:8000/items/12?q=12
,參數(shù)q
就會(huì)自動(dòng)轉(zhuǎn)化為數(shù)字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
補(bǔ)充1:
- 可能為空的情況做類(lèi)型提示,一般使用一個(gè)比
typing.Union
更加方便的類(lèi)型:typing.Optional
- 因?yàn)椋?code>Optional[X] is equivalent to Union[X, None]
- 所以,上面的類(lèi)似等價(jià)于
q: Optional[int] = None
\
補(bǔ)充2:
- 只要給查詢參數(shù)默認(rèn)值
None
就表示它是可選查詢參數(shù),和類(lèi)型提示無(wú)關(guān)。 - 類(lèi)型提示的功能在于如果該值存在是他應(yīng)該是什么類(lèi)型的變量并做類(lèi)型轉(zhuǎn)換和校驗(yàn)。
到此這篇關(guān)于python中fastapi設(shè)置查詢參數(shù)可選或必選的文章就介紹到這了,更多相關(guān)python fastapi 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)
這篇文章主要介紹了Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Python使用Tkinter實(shí)現(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)器的步驟詳解
這篇文章主要介紹了Python使用Tkinter實(shí)現(xiàn)轉(zhuǎn)盤(pán)抽獎(jiǎng)器,,本文分場(chǎng)景通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Pandas使用query()優(yōu)雅的查詢實(shí)例
本文主要介紹了Pandas使用query()優(yōu)雅的查詢實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Python數(shù)字圖像處理代數(shù)之加減乘運(yùn)算
這篇文章主要介紹了Python數(shù)字圖像處理代數(shù)運(yùn)算,對(duì)其中的加、減、乘運(yùn)算分別作了詳細(xì)的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09在Python中字典根據(jù)多項(xiàng)規(guī)則排序的方法
今天小編就為大家分享一篇在Python中字典根據(jù)多項(xiàng)規(guī)則排序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Python簡(jiǎn)單實(shí)現(xiàn)enum功能的方法
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)enum功能的方法,簡(jiǎn)單分析了Python實(shí)現(xiàn)enum功能的相關(guān)技巧,需要的朋友可以參考下2016-04-04如何用Python 實(shí)現(xiàn)全連接神經(jīng)網(wǎng)絡(luò)(Multi-layer Perceptron)
這篇文章主要介紹了如何用Python 實(shí)現(xiàn)全連接神經(jīng)網(wǎng)絡(luò)(Multi-layer Perceptron),幫助大家更好的進(jìn)行機(jī)器學(xué)習(xí),感興趣的朋友可以了解下2020-10-10關(guān)于Python?中IndexError:list?assignment?index?out?of?rang
這篇文章主要介紹了Python?中IndexError:list?assignment?index?out?of?range?錯(cuò)誤解決,概述了兩個(gè)常見(jiàn)的列表函數(shù),它們可以幫助我們?cè)谔鎿Q兩個(gè)列表時(shí)幫助我們處理?Python?中的索引錯(cuò)誤,需要的朋友可以參考下2023-05-05