Webapp2从路由URL中提取命名参数(没有Request,只有URL)

时间:2012-11-01 00:38:07

标签: google-app-engine routes webapp2

我在我的应用中使用如下路线:

Route(r'/thing/<some_id>/foo', handler=ThingFoo, name="thing-foo")

这用于使用uri_for('thing-foo', some_id="something")生成网址,该网址会返回给他们存储的用户。 然后,在另一个请求中,用户先前发送了返回给它们的url,需要对其进行解析。

我想从提供的url中提取<some_id>模式的值,类似于路由器如何将值传递给RequestHandler的get / post方法,但是关于这个的文档似乎是缺乏。

是否有以下内容?

route, some_id = webapp2.extract_uri(the_url)

(当然我可以使用正则表达式直接提取值,但这看起来不是很干)。

以下是我想要做的一个例子。

def image_url(request, image_blob_key):
    if image_blob_key:
        return request.url_for('image', resource=image_blob_key, _full=True)
    else:
        return None

def blob_key_from_image_url(image_url):
    # Do something here to calculate the blob_key from the URL.
    return blob_key

在我的应用程序的一部分中,image_url是从blob_key计算并传递给用户的。稍后,如果他们(例如)想要删除图像,他们会在POST请求中传回url,我想从中提取blob_key,以便我可以将其删除。

2 个答案:

答案 0 :(得分:3)

我通常使用这种风格。

路由器:

Route('/auth/<provider>/call', handler='handlers.AuthHandler:meo', name='meo')

和处理程序类

class AuthHandler(webapp2.RequestHandler):
  def meo(self, provider=None):
    self.response.write(provider)

答案 1 :(得分:1)

也许这样的事情对你有用:

import webapp2

# somewhere in a request handler:
route = self.app.router.build_routes.get('my-route-name')
match = route.regex.match(the_url)
args, kwargs = webapp2._get_route_variables(match, route.defaults.copy())

# do something with args and kwargs, e.g. 
# thing = kwargs['thing-foo']

源代码:http://webapp-improved.appspot.com/_modules/webapp2.html#Route

老实说,我只是将blob_key传递给用户可以删除图像的模板,这样我就可以事先建立一个URL,例如。

uri_for('delete-image', image_key=some_blob_key)