在FastAPI中,我使用了SQLAlchemy和Pydanic返回数据
@router.get("/1", response_model=User)def read_user(db: Session = Depends(get_db)): db_user = user_module.get_user(db, user_id="1") if db_user is None: raise HTTPException(status_code=404, detail="找不到用户") return db_user
这种方式可以帮助我规范化返回的模型,但是我想要将所有api统一返回格式为{"code":0,"msg":"success","data":{...}}
,使原本返回模型中User
的模型置于data
中,方便前端管理。
我尝试了使用FastAPI中间件来实现,但是在swagger等文档中无法识别返回模型User
;如果重新定义一个通用的Pydantic返回模型嵌套模型,就无法对SQLAlchemy
返回的数据模型处理为想要的User
模型,请求社区大佬们帮忙解决,万分感谢!
在FastAPI中,你可以通过创建一个自定义的响应类来统一你的API的返回格式。这个自定义的响应类可以继承自FastAPI的Response
类,并且可以定义你想要的返回格式。
首先,你需要创建一个新的Pydantic模型来作为你的通用返回格式。这个模型可以包含你想要的任何字段,比如code
, msg
, 和 data
。
from pydantic import BaseModelclass CommonResponse(BaseModel): code: int msg: str data: dict
然后,你可以在每个路由中使用这个新的响应模型。假设你仍然希望User
模型是你的返回数据的核心,你可以将它作为CommonResponse
模型中的data
字段。
from sqlalchemy.orm import Sessionfrom sqlalchemy import create_engine, funcfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmakerfrom fastapi import FastAPI, Depends, HTTPExceptionfrom pydantic import BaseModel, ValidationErrorfrom typing import List, Dict, Anyimport datetimeapp = FastAPI()# 定义通用的响应模型class CommonResponse(BaseModel): code: int msg: str data: dict# 创建数据库模型和表Base = declarative_base()class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) email = Column(String) # 其他字段... # ...# 创建数据库引擎和会话类engine = create_engine('sqlite:///test.db') # 根据你的数据库配置修改这个URLBase.metadata.create_all(engine) # 创建表SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # 创建会话类@app.get("/1", response_model=CommonResponse) # 使用通用的响应模型async def read_user(db: Session = Depends(get_db)): # 使用SQLAlchemy的会话作为依赖项 db_user = User.query.get(1) # 查询用户ID为1的用户,根据实际情况修改这个查询语句 if db_user is None: # 如果用户不存在,抛出HTTPException异常 raise HTTPException(status_code=404, detail="找不到用户") return CommonResponse(code=0, msg="success", data=db_user.dict()) # 将用户对象转换为字典,并作为通用响应模型的`data`字段返回
在这个例子中,我使用了SQLAlchemy来查询数据库,并将查询结果转换为字典。然后,我将这个字典作为通用响应模型的data
字段返回。这样,你就可以在你的API中统一返回格式,同时保留Pydantic数据模型。
问题内容: 从如何在PostgreSql的预订表中找到第一次空闲时间的最佳答案中选择 用于查找在给定日期和时间(2012年11月17日:在下面的示例中)开始的时间表中的间隔,它还可以查找周六,周日和公共假日。表中定义了公众假期 如何也排除周末和公共假期? 硬编码空闲时间作为查询之类的保留时间 对于每个空闲时间范围,都需要在联合中有单独的行。 从给定的日期和时间开始,在工作日和工作时间(8:00 .
我用的是全栈-fastapi-postgresql,fastapi 0 . 54 . 1版,pydantic版。 我不知道如何设置pydantic,因此它可以在SQLAlchemy中正确地使用多对一双向关系。出于某种原因,我当前的实现会以最大递归错误破坏堆栈。 我知道github的一个讨论,来自_orm()应该在加载SQLAlchemy双向关系时检测循环,而不是吹栈。我相信这是密切相关的,但我不能
问题内容: 我在网上找到的大多数示例都显示了如何删除空格-但就我而言,我需要保留它。 我希望保留空白(“ html”变量包含pre标记的内容),但是似乎用一个空格代替了多个空格。 如何保存/获取给定beautifulsoup解析器的原始内容? 问题答案: 如果您要解析的内容在 保留空白。
我正在构建一个FastAPI应用程序,它有很多Pydantic模型。尽管应用程序运行良好,但正如所料,OpenAPI (Swagger UI)文档并没有在< code>Schemas部分显示所有这些模型的模式。 下面是pydantic<code>模式的内容。py</code> 所有这些模型实际上都在FastAPI路径中用于验证请求体。< code>FaultQueryParams是一个自定义模型,
本文向大家介绍Springmvc如何返回xml及json格式数据,包括了Springmvc如何返回xml及json格式数据的使用技巧和注意事项,需要的朋友参考一下 问:@ResponseBody注解怎么指定返回xml 还是json 答:@RequestMapping 的produces 属性指定 produces = "application/xml" 或者 produces = "applica
主要内容:1.接口相互作用,2.返回格式,3.数据,4.控制层控制器,5.美观美化,6.优雅优化,7.其他优化方案1.接口相互作用 前端和前端进行交互,前端按约定的请求URL路径,并合并相关参数,进入服务器接收请求,进行业务处理,返回数据给前端。 2.返回格式 我们可以参考这样的设计,这样的好处就把错误类型归类到某个区间内,如果区间不够,可以设计成4个数字。 这样前端开发人员在得到返回值后,根据状态码就可以知道,大概什么错误,再根据消息相关的信息描述,可以快速定位。 状态码和信息就会一一对应,比