【FastAPI 学习 五】统一响应json数据格式

您所在的位置:网站首页 fastapi接收原样json 【FastAPI 学习 五】统一响应json数据格式

【FastAPI 学习 五】统一响应json数据格式

2023-08-24 12:58| 来源: 网络整理| 查看: 265

统一响应json数据格式

本系列博客是配合Vue开发一套后台管理系统,对应的Vue教程见个人博客

https://www.charmcode.cn/

现在了很多项目,都是前后端分离的项目,所以了前后端都会约定传输的数据格式,以及响应提醒。

响应json格式

现在应该都是使用的json交互了,应该没有使用xml的吧? 一般了响应json格式是由以下三个字段组成。

{ "code": 200, // 统一成功状态码 前后端约定 有的是0 有的是20000 "data": xxx, // 可以是任意类型数据 有接口文档对接 "message": "success" // 消息提示,是状态码的简要补充说明 }

前端一般都会做个响应拦截处理,如果状态码不是约定成功的状态码就拦截,然后提示message里面的消息,是的话就返回data里面的数据。

封装响应格式

我在utils/response_code.py 工具文件夹下,创建了一个response_code.py文件 专门存放封装的响应数据格式。

from fastapi import status from fastapi.responses import JSONResponse, Response # , ORJSONResponse from typing import Union # 注意有个 * 号 不是笔误, 意思是调用的时候要指定参数 e.g.resp_200(data=xxxx) 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, } ) # 所有响应状态都封装在这里 xxxx 调用

调用就很简单了, 导入调用就行了。

from api.utils import response_code @router.get("/table/list") async def get_table_list(): return response_code.resp_200(data={ "items": ["xx", "xx"] }) 一些补充

我上面用的序列化的工具方法JSONResponse 是框架自带的,作者还在文档里面补充说明了, 如何调用其他的序列化方法,更快的去序列化json数据。 如 ORJSONResponse UJSONResponse 等方法 这些是要在额外安装依赖库的

可以参见文档 https://fastapi.tiangolo.com/advanced/custom-response/#ujsonresponse

本文GitHub地址

https://github.com/CoderCharm/fastapi-mysql-generator/blob/master/{{cookiecutter.project_name}}/app/common/response_code.py

见个人博客: https://www.charmcode.cn/article/2020-07-16_fastapi_response_json



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3