发布于 2015-08-24 16:00:45 | 387 次阅读 | 评论: 0 | 来源: 网络整理
在 Flask 上经常会执行 RESTful API 。开发者首先会遇到的问题之一是用于 API 的内建 异常处理不给力,回馈的内容不是很有用。
对于非法使用 API ,比使用 abort
更好的解决方式是实现你自己的异常处理类型, 并安装相应句柄,输出符合用户格式要求的出错信息。
基本的思路是引入一个新的异常,回馈一个合适的可读性高的信息、一个状态码和一些 可选的负载,给错误提供更多的环境内容。
以下是一个简单的示例:
from flask import jsonify class InvalidUsage(Exception): status_code = 400 def __init__(self, message, status_code=None, payload=None): Exception.__init__(self) self.message = message if status_code is not None: self.status_code = status_code self.payload = payload def to_dict(self): rv = dict(self.payload or ()) rv['message'] = self.message return rv
这样一个视图就可以抛出带有出错信息的异常了。另外,还可以通过 payload 参数以 字典的形式提供一些额外的负载。
现在,视图可以抛出异常,但是会立即引发一个内部服务错误。这是因为没有为这个错误 处理类注册句柄。句柄增加很容易,例如:
@app.errorhandler(InvalidAPIUsage) def handle_invalid_usage(error): response = jsonify(error.to_dict()) response.status_code = error.status_code return response
以下是如何在视图中使用该功能:
@app.route('/foo') def get_foo(): raise InvalidUsage('This view is gone', status_code=410)