当前位置: 首页 > news >正文

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

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

from fastapi import status
from fastapi.responses import JSONResponse, Response
from typing import Uniondef 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_200def 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_hashhashed_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 responsedef 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_hashhashed_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})

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

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

http://www.lryc.cn/news/402587.html

相关文章:

  • tg小程序前端-dogs前端源码分析
  • Linux——多路复用之select
  • 探索.NET内存之海:垃圾回收的艺术与实践
  • 路由数据获取及封装方法
  • Visual Studio Code 实现远程开发
  • 基于STM32设计的人体健康监测系统(华为云IOT)(189)
  • 开源防病毒工具--ClamAV
  • 【网络】Socket编程
  • 【鸿蒙学习笔记】舜和酒店项目开发
  • 再进行程序的写时,不要使用eval函数——内建函数eval的坏处!!!!!!!!
  • Flink HA
  • 神经网络中如何优化模型和超参数调优(案例为tensor的预测)
  • 使用AJAX发起一个异步请求,从【api_endpoint】获取数据,并在成功时更新页面上的【target_element】
  • 【AI绘画教程】Stable Diffusion 1.5 vs 2
  • 纯前端小游戏,4096小游戏,有音效,Html5,可学习使用
  • ROS、pix4、gazebo、qgc仿真ubuntu20.04
  • qt 国际化语言,英文和中文切换
  • 机器学习入门【经典的CIFAR10分类】
  • 01 安装
  • AI 模型本地推理 - YYPOLOE - Python - Windows - GPU - 吸烟检测(目标检测)- 有配套资源直接上手实现
  • 全国媒体邀约,主流媒体到场出席采访报道
  • 计算机视觉8 图像增广
  • Transformer中的自注意力是怎么实现的?
  • LabVIEW鼠标悬停在波形图上的曲线来自动显示相应点的坐标
  • 操作系统发展简史(Unix/Linux 篇 + DOS/Windows 篇)+ Mac 与 Microsoft 之风云争霸
  • 钡铼分布式 IO 系统 OPC UA边缘计算耦合器BL205
  • 实现了一个心理测试的小程序,微信小程序学习使用问题总结
  • vue是如何进行监听数据变化的?vue2和vue3分别是什么?vue3为什么要更换?
  • 数据结构day3
  • 免费的数字孪生平台助力产业创新,让新质生产力概念有据可依