前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastApi响应体统一封装

FastApi响应体统一封装

作者头像
Python研究所
发布2022-06-17 09:09:46
1.1K0
发布2022-06-17 09:09:46
举报
文章被收录于专栏:大飞的部落阁大飞的部落阁

前言

前面我们介绍的 FastApi 响应体都是使用不同的结构体进行的,有 strlistjson 等,但是这在前后台分离的场景下是不友好的。为了方便前端处理,我们一般会使用统一的数据结构作为响应。

分析

针对常用的响应码,我们可以封装符合自己业务需求的结构体。比如自定义响应码,自定义 message 等。

我们可以使用 Python 的字典类型对统一结构体进行组装,然后根据不同的响应码封装不同的方法去实现统一响应。

我们还可以将公共的内容固定下来,作为 base struct 使用。

呆猫

封装响应体

mycode.py

代码语言:javascript
复制
from fastapi import status
from fastapi.responses import JSONResponse
from typing import Union

# 定义响应统一结构体

def resp_200(*, data: Union[list, dict, str]):
    '''
    200系列的响应结构体
    *:代表调用方法时必须传参数
    Union:代表传入的参数可以是多种类型
    '''
    return JSONResponse(
        status_code=status.HTTP_200_OK,
        content={
            'code': 0,
            'message': "Success",
            'data': data,
        }
    )

def resp_400(*, data: str, message='Bad Request!'):
    '''
    400系列的响应结构体
    *:代表调用方法时必须传参数
    '''
    return JSONResponse(
        status_code=status.HTTP_400_BAD_REQUEST,
        content={
            'code': 1,
            'message': message,
            'data': data,
        }
    )

鉴于文章篇幅长度,我们这里只用 200400 响应体进行演示。

App 中使用

我们在 FastApiApp 中将 mycode 导入,即可直接使用。

response_fengzhuang.py

代码语言:javascript
复制
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse,JSONResponse
import uvicorn
import time
from resp_code import mycode

app = FastAPI()

# 为app增加接口处理耗时的响应头信息


@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    response = await call_next(request)
    process_time = time.time() - start_time

    # X- 作为前缀代表专有自定义请求头
    response.headers["X-Process-Time"] = str(process_time)
    return response

@app.get('/{ck}')
async def index(request: Request,ck:int):
    #print(request.headers)
    if ck < 10:
        return mycode.resp_200(data='关注:Python全栈开发')
    else:
        return mycode.resp_400(data=f'ck的值不对:{ck}')

if __name__ == '__main__':
    uvicorn.run(app='response_fengzhuang:app',
                host='localhost', port=1331, reload=True)

文件结构

文件结构
文件结构

如上,当我们访问/9 的时候,后端返回 200 系列结构体,访问/10 的时候,后端返回 400 系列结构体。

效果展示
效果展示

如上,200400 响应体结构都是一致,前端根据 code 即可处理请求。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 分析
  • 呆猫
    • 封装响应体
      • App 中使用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档