Работа с поддоменом в Google App Engine - PullRequest
19 голосов
/ 08 мая 2009

Как мне работать с поддоменом в google app engine (python).

Я хочу получить первую часть домена и предпринять некоторые действия (обработчик).

Пример:
product.example.com -> отправить его обработчику продуктов
user.example.com -> отправить его обработчику пользователей

На самом деле, используя виртуальный путь, у меня есть этот код:

  application = webapp.WSGIApplication(
    [('/', IndexHandler),
     ('/product/(.*)', ProductHandler),
     ('/user/(.*)', UserHandler)
  ]

Ответы [ 2 ]

26 голосов
/ 08 мая 2009

WSGIApplication не поддерживает маршрутизацию на основе домена. Вместо этого вам нужно создать отдельное приложение для каждого субдомена, например:

applications = {
  'product.example.com': webapp.WSGIApplication([
    ('/', IndexHandler),
    ('/(.*)', ProductHandler)]),
  'user.example.com': webapp.WSGIApplication([
    ('/', IndexHandler),
    ('/(.*)', UserHandler)]),
}

def main():
  run_wsgi_app(applications[os.environ['HTTP_HOST']])

if __name__ == '__main__':
  main()

Кроме того, вы можете написать свой собственный подкласс WSGIApplication, который знает, как обрабатывать несколько хостов.

2 голосов
/ 30 ноября 2010

Мне понравилась идея Ника, но у меня была немного другая проблема. Я хотел сопоставить один конкретный поддомен, чтобы обрабатывать его немного по-другому, но все остальные поддомены должны обрабатываться одинаково. Вот мой пример.

import os

def main():
   if (os.environ['HTTP_HOST'] == "sub.example.com"):
      application = webapp.WSGIApplication([('/(.*)', OtherMainHandler)], debug=True)
   else:
      application = webapp.WSGIApplication([('/', MainHandler),], debug=True)

   run_wsgi_app(application)


if __name__ == '__main__':
   main()
...