Подтвердить что ты не робот

Работа с субдоменом в движке Google

Как я могу работать с дополнительным доменом в Google App Engine (python).

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

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

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

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

Ответ 1

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

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

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()