有没有办法使用不同的WSGI处理程序处理来自不同地理位置的请求?具体来说,我想允许来自一个本地(美国)的所有请求,并将所有其他请求重定向到保留页面,例如
application_us = webapp2.WSGIApplication([
('/.*', MainHandler)
], debug=DEBUG)
application_elsewhere = webapp2.WSGIApplication([
('/.*', HoldingPageHandler)
], debug=DEBUG)
我知道X-AppEngine-Country但是我不太确定如何在这种情况下使用它?
答案 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,但我不确定这是否是最有效的方式。