fastapi响应模型的响应模型定义问题

我想输出一个响应数据格式为以下方式的

{
    code:200,
    msg:"",
    data:null
}

但是在fastapi的响应模型只有提前定义好类型,输出才有(过滤)的功能。无法使用泛型定义

class UserModel(Base):
    name:int
    age:str
    sex:str

class TData(BaseModel,Generic[T]):
    code:int
    msg:str
    data:T

class User(BaseModel):
    name:int
    age:str

使用这种方式时,输出的data是UserModel的字段,而不是我定义的User类的字段
@app.get("", response_model=TData[User],summary="查询用户列表")
user=crud.get_user()
return{
    code:200
    msg:""
    data:user
}

使用这种方式时,输出的data则是User类的字段
class TData2(BaseModel):
    code:int
    msg:str
    data:User

我想如何能定义一个统一的响应方法,而且还能走输出自定义的字段

讨论数量: 1
pardon110

泛型是一种程序设计概念,用于减少重复代码。Java 和 Python 都支持泛型,但是它们的实现方式有所不同。

Java 的泛型是编译时类型擦除的,即编译器会在编译代码时删除泛型类型信息,将泛型转换为实体类型,避免了程序运行时出现类型错误。这也就意味着,在运行时,泛型类型参数会消失,并被擦除掉,如果有代码需要在运行时获取泛型类型信息,需要使用反射来获取。

而 Python 的泛型没有类型擦除,其泛型代码会在运行时保留类型信息。使用泛型时,使用类型注解声明泛型类型参数,但不会在运行时删除类型信息。这意味着代码可以随时获取泛型类型信息,而且不用反射。

Java 的泛型支持通配符(wildcard),这可以让我们使用带有任意类型实参的泛型类。而在 Python 中,泛型不支持通配符,但是它支持以及类型约束。在 Python 中,泛型类型参数可以指定一个类型约束(例如 List[str]),并且可以通过运行时类型检查来确定传入的类型是否是允许的。

在总体上,Java 中的泛型是类型擦除的,而 Python 中的泛型是在运行时保留类型信息的。 Java 中的泛型还有一些其他特殊的概念和用法,例如类型上限、类型下限、泛型类、泛型方法等等。 Python 中的泛型则相对较简单,只需要类名后面添加一个方括号即可实现泛型。

10个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!