FastAPI 學習之路(五十九)封裝統一的json返回處理工具
這之前的接口,我們返回的格式都是每個接口異常返回的數據格式都會不一樣,我們處理起來沒有那麼方便,我們可以封裝一個統一的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
文章首發在公眾號,歡迎關注。