Работа с субдоменом в движке Google
Как я могу работать с дополнительным доменом в Google App Engine (python).
Я хочу получить первую часть домена и выполнить какое-либо действие (обработчик).
Пример:
product.example.com → отправить его обработчику продуктов
user.example.com → отправить его обработчику пользователей
Собственно, используя виртуальный путь, у меня есть этот код:
application = webapp.WSGIApplication(
[('/', IndexHandler),
('/product/(.*)', ProductHandler),
('/user/(.*)', UserHandler)
]
Ответы
Ответ 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()