赞
踩
在本篇文章之前的接口,我们每个接口异常返回的数据格式都不一样,处理起来也没有那么方便,因此我们可以封装一个统一的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下面的json_tools.py里面,我们在接口返回的时候调用
- from common.json_tools import resp_200
-
- def 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_hash
- hashed_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 response
-
- def 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_hash
- hashed_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})
我们看下修改后的用户返回
这样我们就完成了统一接口响应处理,后续我们可以在所有的接口中使用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。