引用博文: https://blog.csdn.net/wgPython/article/details/107525950
FastAPI之get請求
""" 本模塊用來測試 FastApi 中 get和post請求參數: path: 路徑參數 ?: 查詢參數 以及 數據的校驗,和異常處理 """ from fastapi import FastAPI, Query, Path, Request from typing import Optional from fastapi.exceptions import RequestValidationError from fastapi.responses import JSONResponse # get請求參數的兩種方式 # 方式一: 通過路徑參數傳參 app = FastAPI() # 通過FastApi類實例化一個app對象 @app.get('/items/{item_id}') async def read_item_id(item_id: int): """ 接受前端通過 路徑參數(寫在路徑里的) 傳遞的id值 並返回前端 :param item_id: 前端通過路徑傳遞的id值 :return: 前端傳遞的id值 """ return {'item_id': item_id} @app.get('/bar') async def read_bar(name: str, age: int): """ 接受通過 查詢參數 傳遞的值 並返回 :param name: 名字 :param age: 年齡 :return: 名字和年齡 """ return {'name': name, 'age': age} # 自定義request異常處理 @app.exception_handler(RequestValidationError) async def request_validation_exception_handler(request: Request, exc: RequestValidationError): """ 通過重寫 RequestValidationError類的 exception_handler方法 來自定義異常 :param request: Request類的實例化對象 :param exc: RequestValidationError的實例化對象 :return: 400 用戶發送的請求錯誤,服務器沒有操作 msg: 錯誤的堆棧處理 """ print(f'參數不對{request.method},{request.url}') return JSONResponse({'code': 400, 'message': exc.errors()}) # 路徑參數和查詢參數驗證的區別 路徑參數驗證使用path,查詢參數驗證使用query # 路徑參數驗證 @app.get('/bar/{bar_id}') async def read_foo( bar_id: int = Path(1, title='描述'), age: int = Query(..., le=120, title='年齡'), name: Optional[str] = Query(None, min_length=3, max_length=5, regex='^dong') ): """ 合法請求: http://127.0.0.1:8000/bar/10?age=10 name沒有值 http://127.0.0.1:8000/bar/10?age=10&name=dong 路徑參數: bar_id, 函數參數:bar_id, age, name :param bar_id: 路徑參數 bar_id :param age: 年齡 :param name: 姓名 :return: """ return {'bar_id': bar_id, 'age': age, 'name': name} # get請求 查詢參數驗證 @app.get('/get_search_args') async def get_search_args_test( search_id: int = Query(..., title='搜索ID'), name: Optional[str] = Query(..., title='姓名', min_length=3, max_length=5, regex='^dong'), age: Optional[int] = Query(None, title='年齡', le=100) ): """ get請求查詢參數測試函數 參數 search_id: 查找ID, name: '姓名', age: '年齡',三個參數為必填項 :param search_id: 查詢ID :param name: 查詢姓名 :param age: 查詢年齡 :return: search_id, name, age """ return {'search_id': search_id, 'name': name, 'age': age}