Вопрос

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

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

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

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

  application = webapp.WSGIApplication(
    [('/', IndexHandler),
     ('/product/(.*)', ProductHandler),
     ('/user/(.*)', UserHandler)
  ]
Это было полезно?

Решение

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, который знает, как обрабатывать несколько хостов.

Другие советы

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

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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top