4

webapp2.get_app():と現在のリクエストインスタンス:を使用して現在のアプリ/ WSGIインスタンスをwebapp2.get_request()取得できますが、現在のwebapp2ハンドラーインスタンスを:から取得する方法

class MainHandler(webapp2.RequestHandler):

    def get(self):

for :

webapp2.Route(r'/', handler=module.MainHandler, name='main'),

このオブジェクトを参照するために「自己」を使用せずに。出来ますか?

リクエストオブジェクトのルートオブジェクトにはハンドラー名が含まれていますが、インスタンスは含まれていません。

更新:解決策はまだ見つかりません。今のところ、のディスパッチを使用して、ハンドラー(自己)をグローバルに格納しwebapp2.RequestHandlerます。しかし、別の方法が必要です。

解決策を見つけるために、私はNickJohnsonzの「独自のPythonWebアプリケーションフレームワークを作成する方法」を研究しています:http : //blog.notdot.net/2010/01/Writing-your-own-webapp-framework-for-App-Engine webapp2の仕組み。

私が何をした :

とインスタンスをwebapp2.get_request()見つけることができます。しかし、ハンドラーインスタンスではありません。ハンドラインスタンスは保存されません。request.routerequest.route.handler_adapter

結論:自分のコンストラクターを使用してwebapp2.RequestHandler、ハンドラーインスタンス(自己)を要求レジストリ(スレッドセーフ)に保存します。また、リクエストごとに新しいインスタンス(ハンドラーとリクエスト)が作成されるため、ルート名を一致させる必要はありません。

4

1 に答える 1

1

人々が適切な回答を提供するには、質問 (またはコード スニペットの例) をより明確にする必要があるかもしれません。

RequestHandler私が知る限り、最も近いインスタンスを特定するために、関数のコール スタックを見つける方法を探しているようです。その場合、これは webapp2 よりも一般的な Python の質問ですが、tracebackモジュールが探しているものである可能性があります。

于 2013-09-21T22:35:16.430 に答える