FastAPI 学习之路(五十九)封装统一的json返回处理工具

在本篇文章之前的接口,我们每个接口异常返回的数据格式都不一样,处理起来也没有那么方便,因此我们可以封装一个统一的json。

from fastapi import status
from fastapi.responses import JSONResponse, Response
from typing import Union


def resp_200(*, data: Union[list, dict, str]) -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            "code": 200,
            "message": "success",
            "data": data
        }
    )


def resp_400(*, data: str = None, message: str="BAD REQUEST") -> Response:
    return JSONResponse(
        status_code=status.HTTP_400_BAD_REQUEST,
        content={
            "code": 400,
            "message": message,
            "data": data
        }
    )

把代码统一放到common下面的json_tools.py里面,我们在接口返回的时候调用

from common.json_tools import resp_200

def create_user_method(db: Session, user: UserModel):
    db_user = db.query(User).filter(User.email == user.email).first()
    if db_user:
        return resp_200(data={"detail": "this user already exists"})
    from routers.users import get_password_hash
    hashed_password = get_password_hash(user.password)
    init_user = User(email=user.email, hashed_password=hashed_password)
    db.add(init_user)
    db.commit()
    db.refresh(init_user)
    return resp_200(data={"user": init_user.email})

我们看下处理后的效果

我们看创建重复的返回

但是我们发现code返回的都是固定的,那么我们是否可以改造下:

def response(*, code: 200, data: Union[list, dict,str], message="success") -> Response:
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            "code": code,
            "message": message,
            "data": data
        }
    )

改造后,我们的返回消息,可以自定义code,message,data。接下来我们再次改造下我们的新建用户的接口

from common.json_tools import response

def create_user_method(db: Session, user: UserModel):
    db_user = db.query(User).filter(User.email == user.email).first()
    if db_user:
        return response(code=1, message="error", data="this user already exists")
    from routers.users import get_password_hash
    hashed_password = get_password_hash(user.password)
    init_user = User(email=user.email, hashed_password=hashed_password)
    db.add(init_user)
    db.commit()
    db.refresh(init_user)
    return resp_200(data={"user": init_user.email})

我们看下修改后的用户返回

这样我们就完成了统一接口响应处理,后续我们可以在所有的接口中使用。 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 02:40:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 02:40:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 02:40:01       45 阅读
  4. Python语言-面向对象

    2024-07-23 02:40:01       55 阅读

热门阅读

  1. mysql的不等于和null值问题

    2024-07-23 02:40:01       14 阅读
  2. 论c++中的GUI

    2024-07-23 02:40:01       14 阅读
  3. objdump命令的常见用法

    2024-07-23 02:40:01       11 阅读
  4. 关于paddle OCR不能调用cpu的问题

    2024-07-23 02:40:01       14 阅读
  5. 数据结构代码

    2024-07-23 02:40:01       14 阅读
  6. 理解 Objective-C 中 `+load` 方法的执行顺序

    2024-07-23 02:40:01       17 阅读
  7. llama_index中使用Ollama是出现timed out 问题

    2024-07-23 02:40:01       18 阅读
  8. SSH连接虚拟机被拒绝

    2024-07-23 02:40:01       13 阅读
  9. 用python实现一个五子棋游戏,棋盘大小是20x20

    2024-07-23 02:40:01       15 阅读
  10. Leetcode 49. 字母异位词分组

    2024-07-23 02:40:01       15 阅读