从中间件获取URL

时间:2012-07-10 12:42:32

标签: python google-app-engine

我正在使用python和Google App Engine。我在我的代码中添加了一个中间件类,它运行正常。但现在我需要知道在Middleware类中调用了哪个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(或路线)?

2 个答案:

答案 0 :(得分:1)

import os

path = os.environ['PATH_INFO']

答案 1 :(得分:1)

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

environ变量是WSGI environment,它是CGI环境的扩展,因此,部分URL存储在多个变量中,包括PATH_INFO和{{ 1}}。

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

QUERY_STRING

现在您可以按预期访问request = webob.Request(environ) 等;只需要小心访问中间件中的POST数据,因为这将读取处理程序期望读取的相同输入流;如果你想这样做,你需要跳过更多的箍。