当前位置: 首页 > 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})

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • .NET C# 使用 iText 生成PDF
  • JS中对象的方括号[]和点.【对象属性的访问和设置】
  • 如何在项目中打印sql和执行的时间
  • 机器学习的持续交付-CD4ML 端到端自动化构建部署机器学习应用
  • RuoYi-后端管理项目入门篇1
  • Jupyter Notebook安装及基本使用
  • arm的GIC中断
  • c++初阶知识——内存管理与c语言内存管理对比
  • B树与B+树的区别
  • 中间件的理解
  • 数据建模标准-关系建模
  • Airtest的控制手机滑动位置偏差修正方法总结
  • yearrecord——一个类似痕迹墙的React数据展示组件
  • 鸿蒙架构之AOP
  • WordPress 主题技巧:给文章页增加“谁来过”模块。
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Git同步原始仓库到Fork仓库中
  • maven工程打包jar以及java jar命令的classpath使用
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 闭包--闭包之tab栏切换(四)
  • 从0实现一个tiny react(三)生命周期
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 面试遇到的一些题
  • 删除表内多余的重复数据
  • ​Spring Boot 分片上传文件
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 数据结构
  • ###STL(标准模板库)
  • (1) caustics\
  • (10)ATF MMU转换表
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (理论篇)httpmoudle和httphandler一览
  • (五)Python 垃圾回收机制
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)可以带来幸福的一本书
  • (自适应手机端)行业协会机构网站模板
  • .chm格式文件如何阅读
  • .Net MVC + EF搭建学生管理系统
  • .NET MVC之AOP
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .Net的C#语言取月份数值对应的MonthName值
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • []C/C++读取串口接收到的数据程序
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解
  • [bzoj2957]楼房重建
  • [c#基础]DataTable的Select方法