global_exception.py配置
from faiss import logger
from flask import request, jsonify
import json
from werkzeug.exceptions import HTTPException
from sqlalchemysql import *
class APIException(Exception):
def __init__(self, code=500, msg='Mistake', data=None, http_code=None, headers=None):
self.code = code
self.msg = msg
self.data = data or {}
self.http_code = http_code or 500
self.headers = headers or [('Content-Type', 'application/json')]
super().__init__(self.msg)
def get_body(self):
body = {
'code': self.code,
'msg': self.msg,
'data': self.data
}
return json.dumps(body)
def get_headers(self):
return self.headers
@staticmethod
def get_url_no_param():
full_path = str(request.full_path)
main_path = full_path.split('?')
return main_path[0]
class NotFound(Exception):
def __init__(self, code=404, msg='the resource are not found', data=None, http_code=None, headers=None):
self.code = code
self.msg = msg
self.data = data or {}
self.http_code = http_code or 500
self.headers = headers or {'Content-Type': 'application/json'}
super().__init__(self.msg)
def get_body(self):
body = {
'code': self.code,
'msg': self.msg,
'data': self.data
}
return json.dumps(body)
def get_headers(self):
return self.headers
@app.errorhandler(Exception)
def framework_error(e):
logger.exception(e)
if isinstance(e, APIException):
print("APIException")
return jsonify({'code': e.code, 'msg': e.msg}), 200
if isinstance(e, HTTPException):
print("HTTPException")
return jsonify({'code': e.code, 'msg': e.msg}), 200
if isinstance(e, NotFound):
print("NotFound")
return jsonify({'code': e.code, 'msg': e.msg}), 200
else:
return jsonify({'code': 500, 'msg': 'Server error'}), 200
# 2.使用:
# def test(*arge, **kwargs):
# raise NotFound()
app.py的使用
from global_exception import *
@app.route('/test',methods=['POST','GET'])
def test():
if request.method == 'POST':
raise NotFound()
return "re_path"
效果