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.request不起作用,因为self在这种情况下指的是您的中间件对象,而不是请求处理程序。您的中间件不构造请求对象,因此它不可用。

environ变量是WSGI environment,它是 CGI 环境的扩展,因此,部分 URL 存储在多个变量中,包括PATH_INFOQUERY_STRING

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

request = webob.Request(environ)

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

于 2012-07-11T01:33:40.233 回答