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.rhkb.cn/news/380834.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目(knife4j使用,静态资源未放在static资源包下,公共字段自动填充,Spring Cache与Spring Task)

Knife4j(生成接口文档) 使用swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网:https://swagger.io/ Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。…

huawei USG6001v1学习----NAT和智能选路

目录 1.NAT的分类 2.智能选路 1.就近选路 2.策略路由 3.智能选路 NAT:(Network Address Translation,网络地址转换) 指网络地址转换,1994年提出的。NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局…

[GIS实验]居住环境适宜性评价

目的: 拟购买住宅,需在现有条件下,基于地理空间分析方法和空间认知模型对居住环境进行综合评价。通过该实验掌握基于GIS的地理空间认知方法及土地适宜性评价基本原理与方法。 数据: (1)人口调查图&#…

arcgis怎么选取某个指定区域地方的数据,比如从全国乡镇数据选取长沙市乡镇数据

一共5个步骤,没一句废话,耐心看完。 1、如图,先将数据加载到arcgis里面,我们要选取里面长沙市的范围数据。 2、选取长沙市的语句 “市” like ‘长沙%’ 切记,切记,切记。所有符号要在 输入法英文状态…

FPGA:二选一选择器

1、需求 使用XILINX的XC7A35TFFG484-2开发板,完成二选一选择器的设计。 2、分析 二选一选择器如下所示: 观察可知有三个输入端,一个输出端,其逻辑原理为:当sel为高电平时,outa,当sel为低电平…

深入理解Linux网络(三):TCP对象创建

深入理解Linux网络(三):TCP对象创建 TCP对象创建inet_createsock_init_data TCP对象创建 常见的三句TCP编程: int main() {int sk socket(AF_INET, SOCK_STREAM, 0);connect(sk, ...)recv(sk, ...) }简单的两三⾏代码&#xff…

深度学习程序环境配置

深度学习环境配置 因为之前轻薄本没有显卡跑不起来,所以换了台电脑重新跑程序,故记录一下配置环境的步骤及常见错误 本人数学系,计算机部分知识比较匮乏,计算机专业同学可以略过部分内容 深度学习环境配置 深度学习环境配置 CUD…

组内第一次会议

会议内容 1、科研平台使用 增删改查对文件 cp -r /root/mmdetection/dataset/ /root/user/wbzExperiment/mmdetection/ rm -r /root/user/yolov5-master tar -czvf test03.tar.gz test03/ unzip abc.zip 上传文件、解压文件:要在自己的目录中,进入…

2-38 基于matlab的蚁群算法优化无人机uav巡检

基于matlab的蚁群算法优化无人机uav巡检,巡检位置坐标可根据需求设置,从基地出发,返回基地,使得路径最小。可设置蚁群数量,信息素系数。输出最佳路线长度。程序已调通,可直接运行。 2-38 蚁群算法优化无人…

springcloud-config客户端启用服务发现报错找不到bean EurekaHttpClient

背景 在对已有项目进行改造的时候,集成SpringConfigStarter,编写完bootstrap.yml,在idea 启动项中编辑并新增VM options -Dspring.cloud.config.discovery.enabledtrue,该版本不加spring不会从configService获取信息,…

深入理解Android中的缓存与文件存储目录

🌟 引言 在Android应用开发中,合理管理应用的数据存储至关重要。应用可能需要保存各种类型的数据,从简单的配置信息到多媒体文件,甚至是缓存数据以提高性能和用户体验。Android提供了多个内置目录来满足这些需求,但它…

《JavaSE》------20.语法实践项目【图书管理系统】

目录 前言 一、图书管理系统成果展示 1.1 管理员: 1.2 普通用户: 二、 图书管理系统框架的搭建 2.1 book包 2.1.2 BookList类 2.2 operation包 2.2.0 IOperation接口 2.2.1 AddOperatoon类 2.2.2 FindOperation类 2.2.3 DelOperation类 2.2…

前端基础之JavaScript学习——函数的使用

大家好我是来自CSDN的前端寄术区博主PleaSure乐事,今天我们继续有关JavaScript的学习,使用的编译器为vscode,浏览器为谷歌浏览器。 函数的声明与使用 声明 在JavaScript当中函数的声明和其他语言类似,使用如下格式即可声明&…

语义分割——为什么单通道8bit灰度图像能显示多种色块???

目录 一、问题二、解答2.1 标签图的实际存储格式2.2 标签图的显示颜色2.3 颜色映射示例 三、应用颜色映射3.1 OpenCV显示标签图3.2 Matplotlib显示标签图 四、总结 一、问题 大家在做语义分割时不知道有没有这样的疑惑,使用打标签工具后,标签图是单通道…

基于Python+Django,开发的一个在线教育系统

一、项目简介 使用Python的web框架Django进行开发的一个在线教育系统! 二、所需要的环境与组件 Python3.6 Django1.11.7 Pymysql Mysql pure_pagination DjangoUeditor captcha xadmin crispy_forms 三、安装 1. 下载项目后进入项目目录cd Online-educ…

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型,下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址; 作者的项目讲解视频:https:…

【网络安全科普】勒索病毒 防护指南

勒索病毒简介 勒索病毒是一种恶意软件,也称为勒索软件(Ransomware),其主要目的是在感染计算机后加密用户文件,并要求用户支付赎金以获取解密密钥。这种类型的恶意软件通常通过电子邮件附件、恶意链接、下载的软件或漏洞…

基于重要抽样的主动学习不平衡分类方法ALIS

这篇论文讨论了数据分布不平衡对分类器性能造成的影响,并提出了一种新的有效解决方案 - 主动学习框架ALIS。 1、数据分布不平衡会影响分类器的学习性能。现有的方法主要集中在过采样少数类或欠采样多数类,但往往只采用单一的采样技术,无法有效解决严重的类别不平衡问题。 2、论…

Fast-Retry 高性能百万级任务重试框架介绍及使用

一、Fast-Retry 在本专栏的前面文章中我们介绍了 Spring 家族的 重试框架,本篇文章再给大家介绍一个高性能百万级任务重试框架 Fast-Retry 。它是一个高性能任务重试框架,可以支持百万级别任务的并发重试处理。与 Spring-Retry 不同,Fast-Re…

【JavaEE进阶】——Spring事务和事务传播机制

目录 🚩事务 🎈为什么需要事务? 🎈事务的操作 🚩Spring 中事务的实现 🎈数据准备 🎈Spring 编程式事务(了解) 🎈Spring 声明式事务 Transactional 🍭Transactional 详解 &…