0

有没有办法使用不同的 WSGI 处理程序来处理来自不同地理位置的请求?具体来说,我想允许来自一个本地(美国)的所有请求,并将所有其他请求重定向到一个保留页面,例如

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

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

我知道 X-AppEngine-Country 但是我不太确定如何在这种情况下使用它?

4

2 回答 2

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 回答
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 回答