FastAPI 學習之路(五十九)封裝統一的json返回處理工具

北漂的雷子發表於2021-10-29

  

       這之前的介面,我們返回的格式都是每個介面異常返回的資料格式都會不一樣,我們處理起來沒有那麼方便,我們可以封裝一個統一的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

文章首發在公眾號,歡迎關注。

相關文章