Flask之前后端分离restful api学习笔记(二)—— 自定义错误返回、AOP思想解决全局错误返回

具体源码:https://github.com/LMFrank/Flask_api

自定义错误返回#

Flask_api/app/libs/error.py

Copy
from flask import request, json from werkzeug.exceptions import HTTPException class APIException(HTTPException): code = 500 msg = 'Sorry, we make a mistake!' error_code = 999 def __init__(self, msg=None, code=None, error_code=None, headers=None): if code: self.code = code if error_code: self.error_code = error_code if msg: self.msg = msg super(APIException, self).__init__(msg, None) def get_body(self, environ=None): body = dict( msg=self.msg, error_code=self.error_code, request=request.method + ' ' + self.get_url_no_param() ) text = json.dumps(body) return text def get_headers(self, environ=None): return [('Content-Type', 'application/json')] @staticmethod def get_url_no_param(): full_path = str(request.full_path) main_path = full_path.split('?') return main_path[0]

HTTPException中返回的是满足HTTP协议的数据,当我们需要统一接口的错误返回时可以继承werkzeug包内的HTTPException,重写构造函数、get_bodyget_headers方法,使返回数据能够被序列化。

自定义错误类型#

Flask_api/app/libs/error_code.py

Copy
## 示例 from app.libs.error import APIException class ParameterException(APIException): code = 400 msg = 'invalid parameter' error_code = 1000 class NotFound(APIException): code = 404 msg = 'the resource are not found...' error_code = 1001 class AuthFailed(APIException): code = 401 msg = 'authorization failed' error_code = 1002

AOP思想解决全局异常返回#

flask_api/ginger/ginger.py

Copy
from werkzeug.exceptions import HTTPException from app import create_app from app.libs.error import APIException from app.libs.error_code import ServerError app = create_app() @app.errorhandler(Exception) def framework_error(e): if isinstance(e, APIException): return e if isinstance(e, HTTPException): code = e.code msg = e.description error_code = 1007 return APIException(msg, code, error_code) else: # log if not app.config['DEBUG']: return ServerError() else: raise e

利用errorhandler装饰器去包装我们自定义的异常返回函数,将APIExceptionHTTPException加入全局判断。

posted @   LMFrank  阅读(265)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示
CONTENTS