Работа с поддоменом в Google App engine
-
10-07-2019 - |
Вопрос
Как я могу работать с поддоменом в 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()