AI掘金头条新闻系统 (Toutiao News)-封装通用成功响应格式

1. utils/response.py

python 复制代码
from typing import Any
from fastapi.encoders import jsonable_encoder
from starlette.responses import JSONResponse

# 成功响应结果
def success_response(message: str = "success", data: Any = None):
   content = {
       "code": 200,
       "message":message,
       "data":data
   }
   # 目标:把任何的 FastAPI、Pydantic、ORM对象 都要正常响应 + code、 message、 data
   return JSONResponse(content=jsonable_encoder(content))

2. schemas/users/py

python 复制代码
from pydantic import BaseModel, Field, ConfigDict
from typing import Optional

# 用户信息基础数据模型
class UserInfoBase(BaseModel):
    nickname: Optional[str] = Field(None, max_length=50, description="昵称")
    avatar: Optional[str] = Field(None, max_length=255, description="头像URL")
    gender: Optional[str] = Field(None, max_length=10, description="性别")
    bio: Optional[str] = Field(None, max_length=500, description="个人简介")


class UserInfoResponse(UserInfoBase):
    id: int
    username: str

    # 模型类配置
    model_config = ConfigDict(
        from_attributes=True  # 允许从 ORM 对象属性中取值
    )


# data 数据类型
class UserAuthResponse(BaseModel):
    token: str
    user_info: UserInfoResponse = Field(..., alias="userInfo")

    # 模型类配置
    model_config = ConfigDict(
        populate_by_name=True,  # alias / 字段名兼容
        from_attributes=True   # 允许从 ORM 对象属性中取值
    )

完整代码

python 复制代码
from pydantic import BaseModel, Field, ConfigDict
from typing import Optional

# 用户请求
class UserRequest(BaseModel):
    username: str
    password: str

# 用户信息基础数据模型
class UserInfoBase(BaseModel):
    nickname: Optional[str] = Field(None, max_length=50, description="昵称")
    avatar: Optional[str] = Field(None, max_length=255, description="头像URL")
    gender: Optional[str] = Field(None, max_length=10, description="性别")
    bio: Optional[str] = Field(None, max_length=500, description="个人简介")


class UserInfoResponse(UserInfoBase):
    id: int
    username: str

    # 模型类配置
    model_config = ConfigDict(
        from_attributes=True  # 允许从 ORM 对象属性中取值
    )


# data 数据类型
class UserAuthResponse(BaseModel):
    token: str
    user_info: UserInfoResponse = Field(..., alias="userInfo")

    # 模型类配置
    model_config = ConfigDict(
        populate_by_name=True,  # alias / 字段名兼容
        from_attributes=True   # 允许从 ORM 对象属性中取值
    )

3. routers/users.py

python 复制代码
## 构建响应数据:token + 用户信息
# model_validate: 将 ORM 模型对象转换为 Pydantic 响应模型
response_data = UserAuthResponse(token=token, userInfo=UserInfoResponse.model_validate(user))
return success_response(data=response_data)

完整代码

python 复制代码
# 用户注册
@router.post("/register")
async def register(user_data: UserRequest, db: AsyncSession = Depends(get_db)):
    # 根据用户名查询数据库
    db_user = await users.get_user_by_username(db, user_data.username)
    if db_user:
        return Result.error("用户已存在", 400)

    # 新增用户
    user = await users.create_user(db, user_data)

    # 生成 Token
    token = await users.create_token(db, user.id)

    # return {
    #     "code": 200,
    #     "message": "注册成功",
    #     "data": {
    #         "token": token,
    #         "userInfo": {
    #             "id": user.id,
    #             "username": user_data.username,
    #             "bio": user.bio,
    #             "avatar": user.avatar
    #         }
    #     }
    # }

    ## 构建响应数据:token + 用户信息
    # model_validate: 将 ORM 模型对象转换为 Pydantic 响应模型
    response_data = UserAuthResponse(token=token, userInfo=UserInfoResponse.model_validate(user))
    return success_response(data=response_data)
相关推荐
心祭丫丫4 分钟前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了18 分钟前
Skill 索引瘦身与渐进加载
python
贾公子21 分钟前
检测链路的容量规划——用 Little's Law 算清 QPS、并发与积压
后端·python
kyson_26 分钟前
Java 集合框架:从继承体系到数据结构,再到开发选型
后端
天天被压力38 分钟前
【A股分钟级高频数据完全手册 #06】北交所分钟级数据接口:京市股票Pro版最新分时
java·人工智能·python
GeW40 分钟前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库
天天被压力44 分钟前
【A股分钟级高频数据完全手册 #05】指数历史分钟数据接口:Pro版沪深指数分时回放
java·人工智能·python
想不到一个好的ID1 小时前
什么是RAG
后端
ATMQuant1 小时前
量化策略开发08:Lasso因子选择 - 因子动物园的断舍离
python·量化交易·lasso·vnpy·多因子选股
金銀銅鐵1 小时前
JDK 21 中 List.of 的实现细节:从 List12 到 ListN
java·后端·ai编程