這之前的介面,我們返回的格式都是每個介面異常返回的資料格式都會不一樣,我們處理起來沒有那麼方便,我們可以封裝一個統一的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
文章首發在公眾號,歡迎關注。