我正在寻找的东西是类似于 flask 的app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True .
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True
kg7wmglp1#
这取自David Montague。您可以使用自定义响应类注解任何端点,例如
@app.get("/config", response_class=PrettyJSONResponse) def get_config() -> MyConfigClass: return app.state.config
PrettyJSONResponse的示例可以是(indent=4是您要问的)
PrettyJSONResponse
indent=4
import json, typing from starlette.responses import Response class PrettyJSONResponse(Response): media_type = "application/json" def render(self, content: typing.Any) -> bytes: return json.dumps( content, ensure_ascii=False, allow_nan=False, indent=4, separators=(", ", ": "), ).encode("utf-8")
ws51t4hk2#
为了避免阻塞大型模型列表的事件循环,我最终使用了如下所示的解决方案。这应当:1.不阻塞事件循环1.流式结果(更快)1.模型dict操作之间的释放事件循环
async def streaming_output_json(content: List[BaseModel]) -> StreamingResponse: """ Convert a list of Pydantic models to a JSON StreamingResponse. """ async def jsonify_async(models: List[BaseModel]) -> AsyncIterable[str]: yield '[' for i, model in enumerate(models): await asyncio.sleep(0) if i > 0: yield ',' result_dict = jsonable_encoder(model) serialized_dict = json.dumps(result_dict) yield serialized_dict yield ']' return StreamingResponse(jsonify_async(models=content), media_type='application/json') @router.get("") async def get_huge_result(): results = [model1, model2, ...] return await streaming_output_json(results)
anauzrmj3#
我不知道你的问题到底是什么,你能告诉我你需要什么背景吗?然而,因为FASTAPI是基于开放标准(OpenAPI,JSONSchema),它有自动文档。您可以在 host/docs 下找到Swagger UI,或者在 host/redoc 下找到ReDoc。这两种方法都可以轻松地提供JSON响应的漂亮表示。
3条答案
按热度按时间kg7wmglp1#
这取自David Montague。
您可以使用自定义响应类注解任何端点,例如
PrettyJSONResponse
的示例可以是(indent=4
是您要问的)ws51t4hk2#
为了避免阻塞大型模型列表的事件循环,我最终使用了如下所示的解决方案。
这应当:
1.不阻塞事件循环
1.流式结果(更快)
1.模型dict操作之间的释放事件循环
anauzrmj3#
我不知道你的问题到底是什么,你能告诉我你需要什么背景吗?
然而,因为FASTAPI是基于开放标准(OpenAPI,JSONSchema),它有自动文档。
您可以在 host/docs 下找到Swagger UI,或者在 host/redoc 下找到ReDoc。这两种方法都可以轻松地提供JSON响应的漂亮表示。