CrazyRyan
設計輸入框於FastAPI的swagger介面

在用FastAPI設計swagger時,預設都是用要curl的語法呈現出來,所以通常都會是一串json的字串

這樣做並沒有太大的問題,但有時候測試的時候,會想要有一個可以很簡單的按滑鼠兩下就可以輸入的方式

如下圖所示

因此,在保有程式的OOP架構下,希望可以有輸入框的功能,研究了一下後發現了這個做法

用Depends()跟Query(…)完成相關的設計,供參考囉!

(中間順便提供了一個要換json的key的方式)

class sendOrderTEST(BaseModel):
    setID: str = Query(...)
    ID01: str = Query(...)
    ID11: str = Query(...)
    ID21: str = Query(...)
    ID02: str = Query(...)
    ID12: str = Query(...)
    ID22: str = Query(...)

@app.post("/sendOrderTEST", response_model=dict, tags=["sendOrderTEST"], summary="Test", description="Test")
def run_sendOrderTEST(model: sendOrderTEST = Depends()):
    try:
        with open(f'./TEST.json', 'r', encoding='utf-8') as f:
            json_info_data = json.load(f)
        json_info_data['setID'] = f"{model.setID}"
        new_target_carrier_map = {}
        for key, value in json_info_data['EXAMPLE'].items():
            modified_key = key.replace("TEST", model.setID)
            new_target_carrier_map[modified_key] = value
        json_info_data['EXAMPLE'] = new_target_carrier_map
        json_info_data['EXAMPLE'][model.setID][0][0]['Id'] = model.ID01
        json_info_data['EXAMPLE'][model.setID][1][0]['Id'] = model.ID11
        json_info_data['EXAMPLE'][model.setID][2][0]['Id'] = model.ID21
        json_info_data['EXAMPLE'][model.setID][0][1]['Id'] = model.ID02
        json_info_data['EXAMPLE'][model.setID][1][1]['Id'] = model.ID12
        json_info_data['EXAMPLE'][model.setID][2][1]['Id'] = model.ID22


    except Exception as e:
        logger.error(e)
        raise HTTPException(status_code=500, detail=str(e))

    return {"status": 200}