0

地理的に異なる場所からのリクエストを別の WSGI ハンドラで処理する方法はありますか? 具体的には、1 つのローカル (米国) からのすべてのリクエストを許可し、他のすべてのリクエストを保持ページにリダイレクトします。

application_us = webapp2.WSGIApplication([
    ('/.*', MainHandler)
    ], debug=DEBUG)

application_elsewhere = webapp2.WSGIApplication([
    ('/.*', HoldingPageHandler)
    ], debug=DEBUG)

X-AppEngine-Country は知っていますが、この場合の使用方法がよくわかりません。

4

2 に答える 2

1

わかりました、Sebastian Kreft による回答の作成 次のように、他のすべてのハンドラーがサブクラスであるベースハンドラーにこれをスローするのがおそらく最も簡単であると考えました。

class BaseHandler(webapp2.RequestHandler):
    def __init__(self, *args, **kwargs):
        super(BaseHandler, self).__init__(*args, **kwargs)
        country = self.request.headers.get('X-AppEngine-Country')
        if not country == "US" and not country == "" and not country == None: # The last two handle local development
            self.redirect('international_holding_page')
            logging.info(country)

これは DRY とより一致していますが、これが最も効率的な方法であるかどうかはわかりません。

于 2012-07-11T19:01:41.600 に答える
1

必要なことは、アプリを 1 つだけにして、国がサポートされていない場合はハンドラーでユーザーを HoldingPageHandler にリダイレクトすることです。

アプリケーション内で X-AppEngine-Country を使用することは可能ですかを参照してください。そこで彼らは国を取得する方法を説明します

country = self.request.headers.get('X-AppEngine-Country')

したがって、ハンドラーは次のようになります

class MainHandler(webapp2.RequestHandler):
  def get(self):
    country = self.request.headers.get('X-AppEngine-Country')
      if country != "US":
        self.redirect_to('hold') #assuming you have a route to hold
      # your logic
于 2012-07-11T18:54:08.557 に答える