Flask 自定义APIException

更新时间:2020-08-07 09:44:16点击次数:226次

在工作实现前端分离,实现api接口时需要返回人可以理解的异常
这个时候需要我们自己定义异常
异常需格式:

{
"error_code" : 0,
"msg" : "success"
}

创建 exceptions.py文件

import json
from flask import request
from werkzeug.exceptions import HTTPException

# 继承 HTTPException
‘’‘
重写
get_body 修改返回的内容
get_headers 修改header为application/json

code 为http状态码
error_code 为我们自己定义的错误吗
msg 可读的错误信息
’‘’
class APIException(HTTPException):
    code = 500
    error_code = 5001
    msg = 'Sorry, there was an unexpected error(*^v^*)'

    def __init__(self, msg=None, code=None, error_code=None, headers="application/json"):

        self.headers = headers
        if error_code:
            self.error_code = error_code
        if code:
            self.code = code
        if msg:
            self.msg = msg
        super().__init__(msg, None)

    def get_body(self, environ=None):
        body = dict(
            error_code=self.error_code,
            msg=self.msg
        )
        text = json.dumps(body)
        return text

    def get_headers(self, environ=None):
        return [("Content-Type", self.headers)]


创建 api_error.py 文件

from exceptions import APIException

# 自动定制自己需要的异常信息
class Success(APIException):
    code = 200
    msg = 'success'
    error_code = 0
class ServerError(APIException):
    code = 500
    msg = 'Sorry, there was an unexpected error(*^v^*)'
    error_code = 5001


创建 run.py

from flask import Flask
from api_error import Success,ServerError

app = Flask(__name__)

# 返回成功的异常
@app.route('/'):
def index()
return Success()

#浏览器输出
'''
{
"error_code" : 0,
"msg" : "success"
}
'''

# 其他异常
@app.route('/'):
def index()
status = False
if not status:
raise ServerError()
return Success()
'''
{
"error_code" : 5001,
"msg" : "Sorry, there was an unexpected error(*^v^*)"
}
'''

if __name__ == '__main__':
    app.run()

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息