有没有办法处理与语言环境相关的wsgi处理程序的请求?

时间:2012-07-11 18:36:06

标签: google-app-engine python-2.7 wsgi webapp2

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您需要做的是只有一个应用程序,并且如果不支持该国家/地区,则在处理程序中将用户重定向到HoldingPageHandler。

Is it possible to use X-AppEngine-Country within an application。在那里,他们解释了如何获得国家

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

答案 1 :(得分: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,但我不确定这是否是最有效的方式。