Python 从中间件获取URL
我正在使用python和Google应用程序引擎。我已经在代码中添加了一个中间件类,工作正常。但是现在我需要知道在中间件类中调用哪个URL。我不知道如何从那里获取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
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)