FastAPI請(qǐng)求參數(shù)匯總

fastapi有各種各樣的參數(shù),包括:

  • url參數(shù)(定義在url中的參數(shù))
  • param參數(shù)(使用url后面?xx=xx)定義的參數(shù)
  • body參數(shù)(在請(qǐng)求主體中攜帶的json參數(shù))
  • form參數(shù)(在請(qǐng)求主體中攜帶的web表單參數(shù))
  • cookie參數(shù)(在請(qǐng)求的cookie中攜帶的參數(shù))
  • file參數(shù)(客戶端上傳的文件)

1. url參數(shù)

url參數(shù)是一種應(yīng)用非常廣泛的參數(shù),很多地方都會(huì)使用,甚至簡書的博客系統(tǒng)(看看你這篇文章的url)可能同樣應(yīng)用了這種類型的參數(shù)(但有可能不是這種實(shí)現(xiàn)).
他的意思是,將信息放在url中,比如這樣:
http://www.reibang.com/u/91bc345f7c84
那么,我們就可以將后面的91bc345f7c84的部分定義為url參數(shù),傳遞到函數(shù)中:
例:

from fastapi import FastAPI
app=FastAPI()
app.get("/echo/{text}")    #注意這里text將是函數(shù)定義的參數(shù)名.
async def getEchoApi(text:str):    #通過定義參數(shù)類型可以讓fastapi進(jìn)行默認(rèn)的參數(shù)檢查.
    return {"echo":text}

將其用uvicorn放到localhost:8000上執(zhí)行.(不會(huì)的可以參見這篇文章運(yùn)行fastapi程序)
很簡單的一段代碼,將url中的內(nèi)容原樣返回.
比如說,當(dāng)我們?cè)L問這個(gè)url:
localhost:8000/echo/HelloWorld
返回的內(nèi)容將是:
{"echo":text}

2. param參數(shù)

這可能時(shí)最常見的一種參數(shù)了,比如說,當(dāng)我們百度時(shí),可以在地址欄上看到這樣的地址:
https://www.baidu.com/s?ie=UTF-8&wd=fastapi參數(shù)匯總
其中,?后面的設(shè)定了參數(shù)ie為"UTF-8",參數(shù)wd為"fastapi"
這種參數(shù)的定義是所有參數(shù)中最簡單的,直接在函數(shù)定義中定義參數(shù)即可:

from fastapi import FastAPI
app=FastAPI()
app.get("/echo2/")    #注意這里url上沒有定義參數(shù)
async def getEchoApi(text:str):    #fastapi會(huì)聰明的發(fā)現(xiàn)它不是URL參數(shù),然后自動(dòng)將他識(shí)別為param參數(shù).
    return {"echo":text}

運(yùn)行后:
localhost:8000/echo2?text=HelloWorld
返回{"echo":text}

3. body參數(shù)

這種參數(shù)主要常見于數(shù)據(jù)的提交等操作中,注意get操作是不支持?jǐn)y帶請(qǐng)求主體的,可以使用諸如POST,PUT等請(qǐng)求方式.
對(duì)于這種參數(shù)的調(diào)試,我們可以使用POSTMAN進(jìn)行.

from fastapi import FastAPI
from pydantic import BaseModel    #fastapi的一個(gè)依賴,需要從pydantic中引入
app=FastAPI()
class EchoArgs(BaseModel):    #繼承BaseModel
    text:str    #定義一個(gè)字符串型參數(shù)
app.post("/echo/")    #get不支持請(qǐng)求體,更換請(qǐng)求方法
async def postEchoApi(args:EchoArgs):    #設(shè)置剛才定義的參數(shù)
    return {"echo":item.text}    #原樣返回
postman示意圖.png

返回同之前的一樣

4. form參數(shù)

這種參數(shù)主要常見于HTML中的表單,對(duì)于表單瀏覽器有額外的另一套規(guī)則,所以我們?cè)谶@里要定義其參數(shù)類型為表單參數(shù).

from fastapi import FastAPI,Form    #引入Form用于定義表單參數(shù)
app=FastAPI()
app.post("/echo/") 
async def postEchoApi(text:str=Form(None)):    #通過Form設(shè)置參數(shù)
    return {"echo":text}    #原樣返回

效果同之前的一樣

5. cookie參數(shù)

cookie參數(shù),一般用于用戶的標(biāo)識(shí),用戶習(xí)慣的記錄等.各大網(wǎng)站都在使用這種方式,后來的session和token也要用到cookie技術(shù).cookie本質(zhì)是一種在客戶端保存的數(shù)據(jù),每次請(qǐng)求都會(huì)攜帶,你也可以在響應(yīng)中進(jìn)行設(shè)置.

from fastapi import FastAPI,Cookie
app=FastAPI()
app.post("/echo/") 
async def postEchoApi(text:str=Cookie(None)):
    return {"echo":text}    #原樣返回

可以發(fā)現(xiàn),和form參數(shù)的定義十分相似.

6. file參數(shù)

file參數(shù)用于接收客戶端上傳的文件,有兩種方式,

from fastapi import FastAPI,File,UploadFile    #引入文件相關(guān)操作
app=FastAPI()
app.post("/upload/2") 
async def postUploadFile1Api(file:bytes=File(None)):
    ...    #文件相關(guān)操作
app.post("/upload/1")
async def postUploadFile2Api(file:UploadFile=File(None)):
    ...    #文件相關(guān)操作

其中,上傳的文件,可以使用bytes或UploadFile兩種格式,但我們推薦使用UploadFile方式,因?yàn)?

Using UploadFile has several advantages over bytes:

  • It uses a "spooled" file:
    • A file stored in memory up to a maximum size limit, and after passing this limit it will be stored in disk.
  • This means that it will work well for large files like images, videos, large binaries, etc. without consuming all the memory.
  • You can get metadata from the uploaded file.
  • It has a file-like async interface.
    來自,fastapi官網(wǎng).

大意:

  • 它使用“假脫機(jī)”文件:
    • 存儲(chǔ)在內(nèi)存中的文件大小上限為最大毛萌,超過此限制后吭露,文件將存儲(chǔ)在磁盤中。
  • 這意味著它可以很好地用于大型文件抢肛,例如圖像,視頻矫膨,大型二進(jìn)制文件等叠穆,而不會(huì)占用所有內(nèi)存。
  • 您可以從上傳的文件中獲取元數(shù)據(jù)尸疆。
  • 它具有類似類似文件的接口椿猎。
    所以推薦使用UploadFile



以上是這篇文章的全部,錯(cuò)誤的地方懇請(qǐng)指正.
希望能和大家一起學(xué)習(xí).
最后,都看到這了,贊賞一下唄!(^ ~ ^||).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寿弱,隨后出現(xiàn)的幾起案子犯眠,更是在濱河造成了極大的恐慌,老刑警劉巖症革,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐咧,死亡現(xiàn)場離奇詭異,居然都是意外死亡噪矛,警方通過查閱死者的電腦和手機(jī)量蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來艇挨,“玉大人残炮,你說我怎么就攤上這事∷醣酰” “怎么了势就?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵泉瞻,是天一觀的道長。 經(jīng)常有香客問我苞冯,道長袖牙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任抱完,我火速辦了婚禮贼陶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巧娱。我一直安慰自己碉怔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布禁添。 她就那樣靜靜地躺著撮胧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪老翘。 梳的紋絲不亂的頭發(fā)上芹啥,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音铺峭,去河邊找鬼墓怀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卫键,可吹牛的內(nèi)容都是我干的傀履。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莉炉,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼钓账!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起絮宁,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤梆暮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绍昂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啦粹,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年窘游,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卖陵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡张峰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棒旗,到底是詐尸還是另有隱情喘批,我是刑警寧澤撩荣,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站饶深,受9級(jí)特大地震影響餐曹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜敌厘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一台猴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俱两,春花似錦饱狂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尿孔,卻和暖如春俊柔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背活合。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工雏婶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人白指。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓留晚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親侵续。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倔丈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容