Trabalhando com subdomínio no Google App Engine
-
10-07-2019 - |
Pergunta
Como posso trabalhar com sub-domínio no Google App Engine (python).
Eu quero ficar primeira parte de domínio e tomar alguma ação (manipulador).
Exemplo:
product.example.com -> enviá-lo para produtos manipulador
user.example.com -> enviá-lo para os usuários manipulador
Na verdade, usando caminho virtual Eu tenho esse código:
application = webapp.WSGIApplication(
[('/', IndexHandler),
('/product/(.*)', ProductHandler),
('/user/(.*)', UserHandler)
]
Solução
WSGIApplication não é capaz de roteamento baseado em domínio. Em vez disso, você precisa criar um aplicativo separado para cada subdomínio, como este:
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()
Como alternativa, você pode escrever sua própria subclasse WSGIApplication que sabe como lidar com múltiplos hosts.
Outras dicas
Eu gostei da idéia de Nick, mas eu tive um problema um pouco diferente. Eu queria corresponder a um determinado subdomínio para segurá-lo um pouco diferente, mas todas as outras sub-domínios devem ser tratadas da mesma. Então aqui é o meu exemplo.
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()