在flask-restful中开发一个错误处理程序作为装饰器

时间:2014-10-24 16:53:12

标签: python flask flask-restful

我正在努力通过烧瓶来养成休息api。实现了以下装饰器:

def errorhandler(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        try:
            return f(*args, **kwargs)
        except errors.DocNotFound:
            abort(404, message="Wrong document requested", status=404)
    return wrapper

并且,在https://docs.python.org/2/tutorial/errors.html#user-defined-exceptions之后,在另一个名为error.py的文件中(这里导入了),我有这些类:

class DocError(Exception):
       pass

class DocNotFound(DocError):
       pass

现在我的问题是以返回我的可选错误消息的方式实现这两个类。但我不知道该怎么做。你能给我一个提示吗?

P.S。这是我想在我的资源中使用装饰器的方式:

my_decorators = [
    errorhandler,
    # Other decorators
]
class Docs(Resource):
    method_decorators = my_decorators

    def get():
       from .errors import DocNotFound
       if (<something>):
             raise DocNotFound('No access for you!')
       return marshal(......)

    def delete():
        pass

    def put():
        pass

    def post():
        pass

由于

1 个答案:

答案 0 :(得分:1)

您可以使用参数提升自定义异常:

raise DocNotFound('The document "foo" is on the verboten list, no access for you!')

然后使用以下方式访问该消息:

except errors.DocNotFound as err:
    message = err.message or "Wrong document requested"
    abort(404, description=message)

abort(404)来电映射到werkzeug.exceptions.NotFound exception; description参数允许您覆盖默认描述。