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
我想如何能定义一个统一的响应方法,而且还能走输出自定义的字段
泛型是一种程序设计概念,用于减少重复代码。Java 和 Python 都支持泛型,但是它们的实现方式有所不同。
Java 的泛型是编译时类型擦除的,即编译器会在编译代码时删除泛型类型信息,将泛型转换为实体类型,避免了程序运行时出现类型错误。这也就意味着,在运行时,泛型类型参数会消失,并被擦除掉,如果有代码需要在运行时获取泛型类型信息,需要使用反射来获取。
而 Python 的泛型没有类型擦除,其泛型代码会在运行时保留类型信息。使用泛型时,使用类型注解声明泛型类型参数,但不会在运行时删除类型信息。这意味着代码可以随时获取泛型类型信息,而且不用反射。
Java 的泛型支持通配符(wildcard),这可以让我们使用带有任意类型实参的泛型类。而在 Python 中,泛型不支持通配符,但是它支持以及类型约束。在 Python 中,泛型类型参数可以指定一个类型约束(例如
List[str]
),并且可以通过运行时类型检查来确定传入的类型是否是允许的。在总体上,Java 中的泛型是类型擦除的,而 Python 中的泛型是在运行时保留类型信息的。 Java 中的泛型还有一些其他特殊的概念和用法,例如类型上限、类型下限、泛型类、泛型方法等等。 Python 中的泛型则相对较简单,只需要类名后面添加一个方括号即可实现泛型。
from typing import Any class TData(BaseModel): code:int msg:str data:Any 这样就可以