0

Python と Google App Engine を使用しています。コードにミドルウェア クラスを追加しましたが、正常に動作しています。しかし今、ミドルウェア クラスでどの URL が呼び出されているかを知る必要があります。そこからURLを取得する方法がわかりません。

これは私が持っているものです:

class OtherClasses(BaseHandler):
    def get(self):
        # some code...
    def post(self):
        # some code...

class Middleware(object):   
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        #logging.debug("Setting namespace..." + namespace)

        print(self.request.url) #<--- Doesn't work in here...?


app = webapp2.WSGIApplication([ROUTES], debug=True, config=webapp2_config)
app = Middleware(app)

どうやら self.request.urlはミドルウェア クラスでは機能しません。私が現在いるURL(またはルート)を取得する方法を知っている人はいますか??

4

2 に答える 2

1
import os

path = os.environ['PATH_INFO']
于 2012-07-10T18:49:00.763 に答える
1

self.requestselfリクエスト ハンドラではなく、このインスタンスのミドルウェア オブジェクトを参照しているため、機能しません。ミドルウェアはリクエスト オブジェクトを構築しないため、利用できません。

このenviron変数はWSGI 環境PATH_INFOであり、これは CGI 環境の拡張です。そのため、URL の一部はやなどのいくつかの変数に格納されますQUERY_STRING

使い慣れたオブジェクトを取得する最も簡単な方法は、次のように独自の webob 要求オブジェクトを作成することです。

request = webob.Request(environ)

request.urlこれで、期待どおりに etc にアクセスできます。ミドルウェアで POST データにアクセスする場合は注意してください。これは、ハンドラーが読み取ることを期待しているのと同じ入力ストリームを読み取るためです。これを行うには、追加のフープをジャンプする必要があります。

于 2012-07-11T01:33:40.233 に答える