Flask 学习-76.Flask-RESTX 处理异常@api.errorhandler
前言
Flask-RESTX 接口返回400,405会以JSON格式返回,像400,500返回的是html格式
自定义异常message 内容
Werkzeug HTTPException 会自动正确地重新使用描述属性进行序列化。
from werkzeug.exceptions import BadRequest
raise BadRequest()
将返回 400 HTTP 代码并输出
{
"message": "The browser (or proxy) sent a request that this server could not understand."
}
可以修改message输出内容
from werkzeug.exceptions import BadRequest
raise BadRequest('My custom message')
将输出
{
"message": "My custom message"
}
您可以通过为异常提供数据属性来将附加属性附加到输出。
from werkzeug.exceptions import BadRequest
e = BadRequest('My custom message')
e.data = {'custom': 'value'}
raise e
将输出
{
"message": "My custom message",
"custom": "value"
}
Flask 中止助手
将abort错误正确地包装到 HTTPException 中,因此它将具有相同的行为。
from flask import abort
abort(400)
将返回 400 HTTP 代码并输出
{
"message": "The browser (or proxy) sent a request that this server could not understand."
}
而这个:
from flask import abort
abort(400, 'My custom message')
将输出
{
"message": "My custom message"
}
Flask-RESTX 中止助手
errors.abort()和助手的工作Namespace.abort()方式与原始 Flask 类似,flask.abort() 但它也会将关键字参数添加到响应中。
from flask_restx import abort
abort(400, custom='value')
将返回 400 HTTP 代码并输出
{
"message": "The browser (or proxy) sent a request that this server could not understand.",
"custom": "value"
}
而这个:
from flask import abort
abort(400, 'My custom message', custom='value')
将输出
{
"message": "My custom message",
"custom": "value"
}
@api.errorhandler装饰器
装饰器@api.errorhandler允许您为给定的异常(或从它继承的任何异常)注册特定的处理程序,其方式与使用 Flask/Blueprint@errorhandler装饰器的方式相同。
@api.errorhandler(RootException)
def handle_root_exception(error):
'''Return a custom message and 400 status code'''
return {'message': 'What you want'}, 400
@api.errorhandler(CustomException)
def handle_custom_exception(error):
'''Return a custom message and 400 status code'''
return {'message': 'What you want'}, 400
@api.errorhandler(AnotherException)
def handle_another_exception(error):
'''Return a custom message and 500 status code'''
return {'message': error.specific}
@api.errorhandler(FakeException)
def handle_fake_exception_with_header(error):
'''Return a custom message and 400 status code'''
return {'message': error.message}, 400, {'My-Header': 'Value'}
@api.errorhandler(NoResultFound)
def handle_no_result_exception(error):
'''Return a custom not found error message and 404 status code'''
return {'message': error.specific}, 404
您还可以记录错误:
@api.errorhandler(FakeException)
@api.marshal_with(error_fields, code=400)
@api.header('My-Header', 'Some description')
def handle_fake_exception_with_header(error):
'''This is a custom error'''
return {'message': error.message}, 400, {'My-Header': 'Value'}
@api.route('/test/')
class TestResource(Resource):
def get(self):
'''
Do something
:raises CustomException: In case of something
'''
pass
在此示例中,raise
将自动提取文档字符串,并正确记录响应 400。
它还允许在不使用参数时覆盖默认错误处理程序:
@api.errorhandler
def default_error_handler(error):
'''Default error handler'''
return {'message': str(error)}, getattr(error, 'code', 500)
Flask-RESTX 默认会在错误响应中返回一条消息。如果需要自定义响应作为错误并且不需要消息字段,则可以通过在应用程序配置中设置ERROR_INCLUDE_MESSAGE为来禁用它。False
错误处理程序也可以在命名空间上注册。在命名空间上注册的错误处理程序将覆盖在 api 上注册的错误处理程序。
ns = Namespace('cats', description='Cats related operations')
@ns.errorhandler
def specific_namespace_error_handler(error):
'''Namespace error handler'''
return {'message': str(error)}, getattr(error, 'code', 500)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-09-23 python测试开发django-139.Bootstrap 中关于图片的显示(img-responsive)
2020-09-23 python笔记47-面试题:如何判断字典a在字典b
2019-09-23 httprunner学习9-完整的用例结构(yaml&json)
2017-09-23 Appium+python自动化20-查看iOS上app元素属性