# -*- encoding: utf-8 -*- # ----------------------------------------------------------------------------- # @File Name : errorhandler.py # @Time : 2020/11/25 上午9:19 # @Author : X. Peng # @Email : acepengxiong@163.com # @Software : PyCharm # ----------------------------------------------------------------------------- import requests from flask import jsonify, make_response, request from app.api.engine import config, env from app.config.errors import Errors class CustomFlaskErr(Exception): # 默认的返回码 status_code = 200 # 自己定义了一个 return_code,作为更细颗粒度的错误代码 def __init__(self, return_code=None, status_code=None, payload=None): Exception.__init__(self) self.return_code = return_code if status_code is not None: self.status_code = status_code self.payload = payload # 构造要返回的错误代码和错误信息的 dict def to_dict(self): rv = dict(self.payload or ()) # 增加 dict key: return code rv['statusCode'] = self.return_code # 增加 dict key: message, 具体内容由常量定义文件中通过 return_code 转化而来 rv['message'] = Errors.MSG[self.return_code] return rv def add_errorhandler(app): @app.errorhandler(CustomFlaskErr) def handle_flask_error(error): # response 的 json 内容为自定义错误代码和错误信息 response = jsonify(error.to_dict()) # response 返回 error 发生时定义的标准错误代码 response.status_code = error.status_code return response @app.before_request def before_request(): # token鉴权 token = request.headers.get('tampToken', '') # token = 'eyJhbHQiOiJIUzI1NiIsImFsZyI6IkhTMjU2IiwidHlwIjoiSldUIn0.eyJwYXlsb2FkIjoidGFtcC8xOTM3NzkzMDc5NzY5NDE1NjgiLCJpc3MiOiJjYWl4aWFvcXVhbiIsImlhdCI6MTYwNjI5MDYzMH0.WnADEiWd27A8wr2DmOyX1kcs0dWLxpoO-k1yiF0qbBk' url = config[env]['token_auth_url'] res = requests.get(url, {'tampToken': token}) resp = res.json() if resp['statusCode'] != "0000": raise CustomFlaskErr(Errors.TOKEN_INVALID) request.user_id = resp['attributes'] request.return_success = {'statusCode': "0000", 'message': 'ok'} @app.after_request def after_request(response): return response