0

フラスコレストフルでレスト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

今私の問題は、オプションのエラーメッセージを返す方法でこれら2つのクラスを実装することです。しかし、私はそれを行う方法がわかりません。ヒントを教えてください。

PSこれが私のリソースでデコレータを使用したい方法です:

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

ありがとう

4

1 に答える 1

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.NotFounddescription

于 2014-10-24T17:04:23.190 に答える