FastAPI get請求 之路徑參數,查詢參數驗證


引用博文: 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}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM