【FastAPI】利用 typing 泛型实现统一 JSON 返回格式并被 OpenAPI 检测到

假设我们在使用 FastAPI 构建 RESTful 服务时要返回一个 User 对象的数据,同时又想实现统一的返回格式,我们可能这样做:

from pydantic import BaseModel
from typing import Any


class RestfulModel(BaseModel):
	code: int
	msg: str
	data: Any

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


@app.get('/get_user', response_model=RestfulModel)
def get_user():
	user = User(uid='100', name='example', age=18)
	return RestfulModel(code=0, msg='', data=user)

但这样做会使得自动生成的 API 文档无法检测到 User 类型,因此我们可以利用 typing 的泛型来实现:

from pydantic import BaseModel, Field
from pydantic.generics import GenericModel
from typing import Generic, TypeVar, Optional


T = TypeVar('T')  # 泛型类型 T

class RestfulModel(GenericModel, Generic[T]):
	code: int
	msg: str
	data: T


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


@app.get('/get_user', response_model=RestfulModel[User])
def get_user():
	user = User(uid='100', name='example', age=18)
	return RestfulModel(code=0, msg='', data=user)

这样,便既可以实现统一JSON返回格式,又能被 OpenAPI 检测到。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值