2 回答

TA貢獻1808條經驗 獲得超4個贊
所以事實證明,默認響應類以及路由上的響應類僅適用于開放的 API 文檔。默認情況下,文檔將記錄每個端點,就像它們返回 json 一樣。
因此,使用下面的示例代碼,每個響應都將被標記為內容類型 text/html。在第二次路由中,這被 application/json 覆蓋
app = FastAPI(default_response_class=HTMLResponse)
@app.get("/")
async def getDoc():
foo = client.get_database('foo')
result = await foo.bar.find_one({'author': 'Mike'})
return MongoResponse(result)
@app.get("/other", response_class=JSONResponse)
async def json():
return {"json": "true"}
從這個意義上說,我可能應該顯式使用我的類并將默認響應類保留為 JSON,以便將它們記錄為 JSON 響應。

TA貢獻1802條經驗 獲得超5個贊
我求助于猴子補丁
from fastapi import routing as fastapi_routing
from fastapi.responses import ORJSONResponse
def api_route(self, path, **kwargs):
def decorator(func):
if type(kwargs["response_class"]) == DefaultPlaceholder:
kwargs["response_class"] = Default(ORJSONResponse)
self.add_api_route(
path,
func,
**kwargs,
)
return func
return decorator
fastapi_routing.APIRouter.api_route = api_route
添加回答
舉報