Python 从中间件获取URL

Python 从中间件获取URL,python,google-app-engine,Python,Google App Engine,我正在使用python和Google应用程序引擎。我已经在代码中添加了一个中间件类,工作正常。但是现在我需要知道在中间件类中调用哪个URL。我不知道如何从那里获取URL 这就是我所拥有的: class OtherClasses(BaseHandler): def get(self): # some code... def post(self): # some code... class Middleware(object): def

我正在使用python和Google应用程序引擎。我已经在代码中添加了一个中间件类,工作正常。但是现在我需要知道在中间件类中调用哪个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)
class其他类(BaseHandler):
def get(自我):
#一些代码。。。
def post(自我):
#一些代码。。。
类中间件(对象):
定义初始化(自我,应用程序):
self.app=app
定义呼叫(自我、环境、启动响应):
#debug(“设置命名空间…”+命名空间)

print(self.request.url)#
self.request
不起作用,因为
self
在此实例中引用的是中间件对象,而不是请求处理程序。您的中间件没有构造请求对象,因此它不可用

environ
变量是一个,是CGI环境的扩展,因此,URL的一部分存储在多个变量中,包括
PATH\u INFO
QUERY\u STRING

获取熟悉对象的最简单方法可能是构造自己的webob请求对象,如下所示:

request = webob.Request(environ)

现在您可以访问
request.url
等,正如您所期望的那样;只需注意访问中间件中的POST数据,因为它将读取处理程序期望读取的相同输入流;如果你想这样做,你需要跳过额外的环。

@ShayErlichmen是的,中间件中没有这些环class@ShayErlichmen我猜也不行,但是self.app.request呢?在
os.path
中访问CGI环境会直接破坏抽象,是个坏主意,特别是当WSGI环境非常容易使用时。谢谢,这实际上是唯一一个看起来有效的代码。
request = webob.Request(environ)