我正在使用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(或路线)?
答案 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数据,因为这将读取处理程序期望读取的相同输入流;如果你想这样做,你需要跳过更多的箍。