2017-01-20 16 views
2

フラスコのドキュメントclearly explainsデコレータerrorhandler()でカスタムエラーページを作成する方法。クラスコンテキストでカスタムエラーページを使用するにはどうすればよいですか?

私のFlaskアプリケーションがメソッドでデコレータを使用できないため、クラスの一部である場合、どのようにカスタムページを使用できますか?例:

import flask 

class Webserver: 
    def __init__(self): 
     app = flask.Flask(__name__) 
     app.add_url_rule('/', view_func=self.hello) 
     app.run() 

    def hello(self): 
     return 'hello' 

if __name__ == "__main__": 
    Webserver() 

add_url_rule()の使用は、errorhandler()と同等である、ルーティングのために同じ問題を回避しますか?

答えて

3

直接エラーハンドラを登録するための同等があるが、app.register_error_handler()と呼ばれる:それでも

class Webserver: 
    def __init__(self): 
     app = flask.Flask(__name__) 
     app.add_url_rule('/', view_func=self.hello) 
     app.register_error_handler(404, self.not_found_handler) 
     app.run() 

errorhandler()はちょうどバインドメソッドを渡す必要があります。あなたは404 Not Found HTTPコードのハンドラとしてメソッドを登録したい場合は、例えば、ちょうど404用デコレータオブジェクトを作成し、引数としてバインドされたメソッドを呼び出すこと:理由はすべて@app.errorhandler()

class Webserver: 
    def __init__(self): 
     app = flask.Flask(__name__) 
     app.add_url_rule('/', view_func=self.hello) 
     app.errorhandler(404)(self.not_found_handler) 
     app.run() 

これは動作しますデコレータは呼び出し可能なものを登録するので、戻り値は元の呼び出し可能な状態のままです。これを無視して登録操作にのみ使用できます。

デコレータapp.route()でも同じことができます。

+0

あなたの例で '404'を使うだけで十分ですか?私は私のサンプルコードでこれを試して、 'werkzeug.exceptions.NotFound:404:Not Found'を取得しました。 – WoJ

+0

@WoJ:' errorhandler() '引数はHTTPコードか例外です。 ://flask.pocoo.org/docs/0.12/api/#flask.Flask.errorhandler)。 –

+0

OK、私は問題を見つけました:トレースバックは内部的な問題でした。コアの問題は、ハンドラ定義が 'register_error'によって渡されたパラメータ、すなわちエラーコードを考慮していないということでした。ありがとうございました。 – WoJ

関連する問題