0

私は自分のアプリで次のようなルートを使用しています:

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

これは、を使用してURLを生成するために使用されuri_for('thing-foo', some_id="something")、保存するユーザーに返されます。次に、別のリクエストで、ユーザーは以前に返されたURLを投稿し、そこで解析する必要があります。

<some_id>ルーターがRequestHandlerのget/postメソッドに値を渡すのと同じ方法で、提供されたURLからパターンの値を抽出したいのですが、これに関するドキュメントが不足しているようです。

次のようなものはありますか?

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を抽出します。

4

2 に答える 2

3

私は通常このスタイルを使用します。

ルーター:

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

そしてハンドラークラス

class AuthHandler(webapp2.RequestHandler):
  def meo(self, provider=None):
    self.response.write(provider)
于 2012-11-01T01:15:38.283 に答える
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)
于 2012-11-02T10:00:45.707 に答える