You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
2.1 KiB

# !/usr/bin/env python3
# -*- encoding : utf-8 -*-
# @Filename : response_code.py
# @Software : VSCode
# @Datetime : 2021/11/03 17:16:03
# @Author : leo liu
# @Version : 1.0
# @Description :
"""
定义返回的状态
# 看到文档说这个orjson 能压缩性能(squeezing performance)
https://fastapi.tiangolo.com/advanced/custom-response/#use-orjsonresponse
It's possible that ORJSONResponse might be a faster alternative.
# 安装
pip install --upgrade orjson
测试了下,序列化某些特殊的字段不友好,比如小数
TypeError: Type is not JSON serializable: decimal.Decimal
"""
from fastapi import status
from fastapi.responses import JSONResponse, Response, ORJSONResponse
from typing import Union
def resp_200(data: Union[list, dict, str]=None, *, message: str="Success") -> dict:
return {
'code': 200,
'message': message,
'data': data,
}
def resp_403(data: str = None) -> Response:
return ORJSONResponse(
status_code=status.HTTP_403_FORBIDDEN,
content={
'code': 403,
'message': "Forbidden",
'data': data,
}
)
def resp_404(data: str = None) -> Response:
return ORJSONResponse(
status_code=status.HTTP_404_NOT_FOUND,
content={
'code': 404,
'message': "Page Not Found",
'data': data,
}
)
def resp_500(data: str = None) -> Response:
return ORJSONResponse(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
content={
'code': "500",
'message': "Server internal error",
'data': data,
}
)
# 自定义
def resp_5000(data: Union[list, dict, str]) -> Response:
return JSONResponse(
status_code=status.HTTP_200_OK,
content={
'code': 5000,
'message': "Token failure",
'data': data,
}
)
# 用户创建失败
def resp_5010(message: str="Error") -> Response:
return JSONResponse(
status_code=status.HTTP_200_OK,
content={
'code': 5010,
'message': message,
'data': None
}
)