Flask_restful 之 自定义错误信息

Flask_restful 之 自定义错误信息

@(Python学习-随手记)[Flask_restful, 帮助]

  • 注意:
    • 无论是Exception异常、HTTPException异常、还是及其子类异常都可以实现自定义错误信息
    • 如果是Exception异常,则会在控制台打印Traceback信息,而HTTPException异常则不会。所以如果是与HTTP 请求相关的自定义异常,继承自HTTPException较为合适
    • 需要将debug设置为falseapp.run(debug=False),否则就会进入debug模式并显示http stacktrace错误。
  • 使用postman模拟浏览器请求

起源:产生问题

from flask import Flask
from flask_restful import Resource, Api, abort,HTTPException
from werkzeug.exceptions import BadRequest

app = Flask(__name__)
# api = Api(app,errors=errors)
api = Api(app)

class DemoTest(Resource):
    # 定义类继承Resouce
    def get(self):
        raise TypeError(u"错了吧")

# 将资源类挂载在'/'路由下
api.add_resource(DemoTest,'/')

if __name__ == '__main__':
    app.run(debug=False)
  • 当使用postman请求127.0.0.1:5000时,出现500错误
    在这里插入图片描述

  • 如果这样的错误信息和状态码并不是我们想要的,或者并不是很友好,怎么解决,这时需要自定义错误信息

自定义错误信息(Exception)

#!/use/bin/python
# --*-- coding: utf-8 -*-

from flask import Flask
from flask_restful import Resource, Api, abort,HTTPException
from werkzeug.exceptions import BadRequest

errors = {
    # StandardError(Exception)的子类
    "TypeError":{
        'message': "TypeError 错误信息已被修改",
        'status': 200,
        'extra': "TypeError 被修改了,你看吧",
    }
}

app = Flask(__name__)
api = Api(app,errors=errors)


class DemoTest(Resource):
    # 定义类继承Resouce
    def get(self):
        raise TypeError(u"错了吧")

# 将资源类挂载在'/'路由下
api.add_resource(DemoTest,'/')

if __name__ == '__main__':
    app.run(debug=False)
  • 定义字典errors,key表示异常类名,value表示自定义的错误信息,包括message,statusextra信息
  • 初始化Api:api = Api(app,errors=errors)
  • postman请求127.0.0.1:5000时,即使人为的抛出TypeError异常,但我们修改了错误信息,导致请求依然会成功
    在这里插入图片描述

自定义错误信息(HTTPException)

#!/use/bin/python
# --*-- coding: utf-8 -*-

from flask import Flask
from flask_restful import Resource, Api, abort,HTTPException
from werkzeug.exceptions import BadRequest

errors = {
    # StandardError(Exception)的子类
    "TypeError":{
        'message': "TypeError 错误信息已被修改",
        'status': 200,
        'extra': "TypeError 被修改了,你看吧",
    },
    # HTTPException的子类
    # "BadRequest":{
    #     'message': "BadRequest 错误信息已被修改",
    #     'status': 200,
    #     'extra': "BadRequest 被修改了,你看吧",
    # }
}

app = Flask(__name__)
api = Api(app,errors=errors)

class DemoTest(Resource):
    # 定义类继承Resouce
    def get(self):
        # 抛出 HTTPException 异常
        raise BadRequest()

# 将资源类挂载在'/'路由下
api.add_resource(DemoTest,'/')

if __name__ == '__main__':
    app.run(debug=False)
  • 这次我们人为抛出HTTPException子类异常,如果不修改错误信息则返回如下:
    在这里插入图片描述

  • 源代码:BadRequest(HTTPException)

class BadRequest(HTTPException):

    """*400* `Bad Request`

    Raise if the browser sends something to the application the application
    or server cannot handle.
    """
    code = 400
    description = (
        'The browser (or proxy) sent a request that this server could '
        'not understand.'
    )
  • 如果自定义错误信息后,postman请求返回200状态码
#!/use/bin/python
# --*-- coding: utf-8 -*-

from flask import Flask
from flask_restful import Resource, Api, abort,HTTPException
from werkzeug.exceptions import BadRequest

errors = {
    # StandardError(Exception)的子类
    "TypeError":{
        'message': "TypeError 错误信息已被修改",
        'status': 200,
        'extra': "TypeError 被修改了,你看吧",
    },
    # HTTPException的子类
    "BadRequest":{
        'message': "BadRequest 错误信息已被修改",
        'status': 200,
        'extra': "BadRequest 被修改了,你看吧",
    }
}

app = Flask(__name__)
api = Api(app,errors=errors)

class DemoTest(Resource):
    # 定义类继承Resouce
    def get(self):
        # 抛出 HTTPException 异常
        raise BadRequest()
        # 抛出Exception 异常
        # raise TypeError(u"错了吧")

# 将资源类挂载在'/'路由下
api.add_resource(DemoTest,'/')

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

在这里插入图片描述

源码

class flask.ext.restful.Api(app=None, prefix='', default_mediatype='application/json', decorators=None, catch_all_404s=False, url_part_order='bae', errors=None)

其中:
errors () – A dictionary to define a custom response for each exception or error raised during a request
  • 译为:一个字典,用于为请求过程中出现的错误或者异常自定义响应信息

官方文档

define-custom-error-messages
custom-error-message-json-object-with-flask-restful

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值