首頁 > 軟體

Python FastAPI 多引數傳遞的範例詳解

2022-12-17 14:00:24

Python FastAPI請求引數傳遞

FastAPI多引數傳遞型別

FastAPI通過模板來匹配URL中的參數列,大致有如下三類方式傳遞引數:

  • 路徑引數傳遞:獲取自定義的構造URL中的引數
  • GET引數傳遞:獲取一個URL後面帶的?param1=1&param2=2這種型別引數
  • POST引數傳遞:獲取POST請求中的引數,因為POST是加密的,因此更加安全,但有額外開銷,測試API使用額外工具或外掛或者自己寫Request等

路徑多引數傳遞

  • 存取url:
  • http://127.0.0.1:8001/uname=goudan/sex=1/age=18
  • 匹配模板:
  • http://127.0.0.1:8001/uname=值1/sex=值2/age=值3
  • 對應API程式碼
import uvicorn
from fastapi import FastAPI

#構造FastAPI範例
app = FastAPI(name="mutilParam")

""""
路徑多引數傳遞
存取url:
http://127.0.0.1:8001/uname=goudan/sex=1/age=18
匹配模板:
http://127.0.0.1:8001/uname=值1/sex=值2/age=值3
對應API程式碼:
"""

@app.get("/uname={uname}/sex={sex}/age={age}")
async def api1(uname: str, sex, age: str):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }

GET請求多引數傳遞

存取url:http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18 

匹配模板:http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3 

對應API程式碼

import uvicorn
from fastapi import FastAPI

#構造FastAPI範例
app = FastAPI(name="mutilParam")

""""
GET請求多引數傳遞
存取url:
http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18
匹配模板:
http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3
對應API程式碼:
"""
@app.get("/get")
async def api2(uname=Query(None), sex=Query(...), age=Query(None)):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }

注意:

引數裡uname=Query(None):
uname對應著傳入URL裡的?uname=xxx
Query()是導的包from fastapi import Query
Query(None)裡的None是預設值,可以是任意值,當URL裡沒有傳入這個引數時,就會用預設值替代;當None為…,則表示為必須傳遞引數

POST請求多引數傳遞

  • 存取url:

http://127.0.0.1:8001/post
body中引數:{“uname”:“goudan”,“sex”:“1”,“age”:“18”}

  • 匹配模板:

http://127.0.0.1:8001/post

  • body中引數:{uname=值1, sex=值2, age=值3}

對應API程式碼

import uvicorn
from fastapi import FastAPI

#構造FastAPI範例
app = FastAPI(name="mutilParam")

""""
POST請求多引數傳遞
"""
@app.post("/post")
async def api3(uname=Body(None), sex=Body(...), age=Body(None)):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }

注意:

Post引數傳遞幾乎和GET相似,就是將Query替換成來寫,引數裡uname=Body(None):
Body()是導的包from fastapi import Body
Body的寫法與用法和Query相同,括號裡是預設值
uname=Body(None)裡的None是預設值,可以是任意值,當URL裡沒有傳入這個引數時,就會用預設值替代;當None為…,則表示為必須傳遞引數

案例完整程式碼

三種引數傳遞API的完整程式碼如下:

import uvicorn
from fastapi import FastAPI
from fastapi import Query
from fastapi import Body

#構造FastAPI範例
app = FastAPI(name="mutilParam")

""""
路徑多引數傳遞
存取url:
http://127.0.0.1:8001/uname=goudan/sex=1/age=18
匹配模板:
http://127.0.0.1:8001/uname=值1/sex=值2/age=值3
對應API程式碼:
"""

@app.get("/uname={uname}/sex={sex}/age={age}")
async def api1(uname: str, sex, age: str):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }

""""
GET請求多引數傳遞
存取url:
http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18
匹配模板:
http://127.0.0.1:8001/get?uname=值1&sex=值2&age=值3
對應API程式碼:
引數裡uname=Query(None):
    uname對應著傳入URL裡的?uname=xxx
    Query()是導的包from fastapi import Query
    Query(None)裡的None是預設值,可以是任意值,當URL裡沒有傳入這個引數時,就會用預設值替代;當None為...,則表示為必須傳遞引數
"""
@app.get("/get")
async def api2(uname=Query(None), sex=Query(...), age=Query(None)):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }


""""
POST請求多引數傳遞
存取url:
http://127.0.0.1:8001/post
{"uname":"goudan","sex":"1","age":"18"}
匹配模板:
http://127.0.0.1:8001/post
{"uname":"xxx","age":"x"}
對應API程式碼:

Post引數傳遞幾乎和GET相似,就是將Query替換成來寫:
引數裡uname=Body(None):
Body()是導的包from fastapi import Body
Body的寫法與用法和Query相同,括號裡是預設值
uname=Body(None)裡的None是預設值,可以是任意值,當URL裡沒有傳入這個引數時,就會用預設值替代;當None為...,則表示為必須傳遞引數
"""
@app.post("/post")
async def api3(uname=Body(None), sex=Body(...), age=Body(None)):
    return {
        "uname": uname,
        "sex": sex,
        "age": age,
    }

#主函數
if __name__ == '__main__':
    #啟動服務
    uvicorn.run(app='MutilParamOfAPI:app', host="127.0.0.1", port=8001, reload=False)

案例完整測試

啟動服務

在完整程式碼案例中任何位置—>右鍵—>Run MutilParamOfAPI—>資訊如下:

/Users/liyadong/PycharmProjects/MyAPI/MutilParamOfAPI.py 
INFO:     Started server process [31526]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)

存取測試

  • 路徑多引數測試

瀏覽器存取輸入位址列如下:

http://127.0.0.1:8001/uname=goudan/sex=1/age=18

  • 瀏覽器頁面資訊如下:
{"uname":"goudan","sex":"1","age":"18"}

{"uname":"goudan","sex":"1","age":"18"}

GET請求多引數測試

  • 瀏覽器存取輸入地址:http://127.0.0.1:8001/get?uname=goudan&sex=1&age=18

瀏覽器頁面資訊如下:

{"uname":"goudan","sex":"1","age":"18"}

POST請求多引數測試

到此測試就完畢了,關於可傳引數和必傳引數,大家自行減少引數鍵值對即可。

參考資料:
https://blog.csdn.net/weixin_35757704/article/details/123392281

到此這篇關於Python FastAPI 多引數傳遞的文章就介紹到這了,更多相關Python FastAPI 多引數傳遞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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