这之前的接口,我们返回的格式都是每个接口异常返回的数据格式都会不一样,我们处理起来没有那么方便,我们可以封装一个统一的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下面的jsontools.py里面,我们在接口返回的时候调用。看下我们处理后的效果。

我们在创建的用户的时候修改下,用我们的工具统一的处理下

# 新建用户
@usersRouter.post("/users/", tags=["users"])
def create_user(user: UserCreate, db: Session = Depends(get_db)):
"""
- **email**: 用户的邮箱
- **password**: 用户密码
"""
db_crest = get_user_emai(db, user.email)
user.password = get_password_hash(user.password)
if not db_crest:
user=db_create_user(db=db, user=user)
return resp_200(data={'user':user.email})
return resp_200(data={'detail':"账号不能重复"})

我们看下postman的返回

我们看创建重复的返回

但是我们看着返回的code都是固定的,那么我们是否可以升级改造下。

def reponse(*, 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。那么我们去改造下我们创建的用户的接口

# 新建用户
@usersRouter.post("/users/", tags=["users"])
def create_user(user: UserCreate, db: Session = Depends(get_db)):
"""
- **email**: 用户的邮箱
- **password**: 用户密码
"""
db_crest = get_user_emai(db, user.email)
user.password = get_password_hash(user.password)
if not db_crest:
user=db_create_user(db=db, user=user)
return reponse(code=0,data={'user':user.email},message="success")
return reponse(data={'msg':"账号不能重复"},code=1,message="error")

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

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

代码存储https://gitee.com/liwanlei/fastapistuday

文章首发在公众号,欢迎关注。

FastAPI 学习之路(五十九)封装统一的json返回处理工具的更多相关文章

  1. FastAPI 学习之路(十九)处理错误

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  2. FastAPI 学习之路(十五)响应状态码

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  3. FastAPI 学习之路(十二)接口几个额外信息和额外数据类型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  4. FastAPI 学习之路(十四)响应模型

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  5. FastAPI 学习之路(十六)Form表单

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  6. FastAPI 学习之路(十八)表单与文件

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  7. FastAPI 学习之路(十)请求体的字段

    系列文章: FastAPI 学习之路(一)fastapi--高性能web开发框架 FastAPI 学习之路(二) FastAPI 学习之路(三) FastAPI 学习之路(四) FastAPI 学习之 ...

  8. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  9. Kubernetes学习之路(十九)之Kubernetes dashboard认证访问

    Dashboard:https://github.com/kubernetes/dashboard 一.Dashboard部署 由于需要用到k8s.gcr.io/kubernetes-dashboar ...

随机推荐

  1. Request 根据用户输入的信息获取输入到控制台

    html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  2. Java学习笔记--注解和反射

    注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...

  3. 聊聊ReentrantLock基于AQS的公平锁和非公平锁的实现区别

    ReentrantLock锁的实现是基于AQS实现的,所以先简单说下AQS: AQS是AbstractQueuedSynchronizer缩写,顾名思义:抽象的队列同步器,它是JUC里面许多同步工具类 ...

  4. Jupyter Notebook 修改字体和大小

    1 打开这个目录 D:\SoftWare\Anaconda\Lib\site-packages\notebook\static\custom 点开这个 也就是你安装的 python下面的 jupyte ...

  5. 【C++基础教程】第二课

    一,上次的课后练习答案 1,输出1+2=3 2,输出2 2.25 2.25 2.25 3,第一空iostream或bits/stdc++.h 第二空main(),main(void)或main(int ...

  6. 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚

    遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...

  7. PHP中操作数据库的预处理语句

    今天这篇文章的内容其实也是非常基础的内容,不过在现代化的开发中,大家都使用框架,已经很少人会去自己封装或者经常写底层的数据库操作代码了.所以这回我们就来复习一下数据库中相关扩展中的预处理语句内容. 什 ...

  8. switchery插件:多个按钮,用jquery进行切换

    单个按钮可以参照这个链接https://blog.csdn.net/u012233776/article/details/53305846 多个按钮时, html中其中想操作这个按钮开启与关闭 < ...

  9. Shell系列(35)- for循环语法一简介及批量解压缩脚本

    for循环语法一 for 变量 in 值1 值2 值3 - do 程序 done 例子 需求:批量解压缩 脚本: #!/bin/bash cd /root/publicls *.tar.gz > ...

  10. 开机延时启动多程序(Dos下Start命令详解)

    前言 在实际开发当中,很多程序需要开机自启,并且对启动顺序有所要求,这里推荐一种最简单的开机延时启动多程序的方法,使用bat脚本来控制程序的启动顺序. Bat脚本实现 Bat比较简单,延时是采用pin ...