当前位置:   article > 正文

FastAPI 学习之路(五十九)封装统一的json返回处理工具_fast api 统一返回值结构

fast api 统一返回值结构

在本篇文章之前的接口,我们每个接口异常返回的数据格式都不一样,处理起来也没有那么方便,因此我们可以封装一个统一的json。

  1. from fastapi import status
  2. from fastapi.responses import JSONResponse, Response
  3. from typing import Union
  4. def resp_200(*, data: Union[list, dict, str]) -> Response:
  5. return JSONResponse(
  6. status_code=status.HTTP_200_OK,
  7. content={
  8. "code": 200,
  9. "message": "success",
  10. "data": data
  11. }
  12. )
  13. def resp_400(*, data: str = None, message: str="BAD REQUEST") -> Response:
  14. return JSONResponse(
  15. status_code=status.HTTP_400_BAD_REQUEST,
  16. content={
  17. "code": 400,
  18. "message": message,
  19. "data": data
  20. }
  21. )

把代码统一放到common下面的json_tools.py里面,我们在接口返回的时候调用

  1. from common.json_tools import resp_200
  2. def create_user_method(db: Session, user: UserModel):
  3. db_user = db.query(User).filter(User.email == user.email).first()
  4. if db_user:
  5. return resp_200(data={"detail": "this user already exists"})
  6. from routers.users import get_password_hash
  7. hashed_password = get_password_hash(user.password)
  8. init_user = User(email=user.email, hashed_password=hashed_password)
  9. db.add(init_user)
  10. db.commit()
  11. db.refresh(init_user)
  12. return resp_200(data={"user": init_user.email})

我们看下处理后的效果

我们看创建重复的返回

但是我们发现code返回的都是固定的,那么我们是否可以改造下:

  1. def response(*, code: 200, data: Union[list, dict,str], message="success") -> Response:
  2. return JSONResponse(
  3. status_code=status.HTTP_200_OK,
  4. content={
  5. "code": code,
  6. "message": message,
  7. "data": data
  8. }
  9. )

改造后,我们的返回消息,可以自定义code,message,data。接下来我们再次改造下我们的新建用户的接口

  1. from common.json_tools import response
  2. def create_user_method(db: Session, user: UserModel):
  3. db_user = db.query(User).filter(User.email == user.email).first()
  4. if db_user:
  5. return response(code=1, message="error", data="this user already exists")
  6. from routers.users import get_password_hash
  7. hashed_password = get_password_hash(user.password)
  8. init_user = User(email=user.email, hashed_password=hashed_password)
  9. db.add(init_user)
  10. db.commit()
  11. db.refresh(init_user)
  12. return resp_200(data={"user": init_user.email})

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/875010
推荐阅读
相关标签
  

闽ICP备14008679号