Travailler avec un sous-domaine dans le moteur d'applications Google
-
10-07-2019 - |
Question
Comment travailler avec un sous-domaine dans le moteur d'applications Google (python).
Je veux obtenir la première partie du domaine et prendre des mesures (gestionnaire).
Exemple:
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; produit.exemple.com - > envoyez-le au gestionnaire de produits
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; utilisateur.exemple.com - > envoyez-le au gestionnaire d'utilisateurs
En fait, en utilisant le chemin virtuel, j'ai ce code:
application = webapp.WSGIApplication(
[('/', IndexHandler),
('/product/(.*)', ProductHandler),
('/user/(.*)', UserHandler)
]
La solution
WSGIApplication n'est pas capable de routage basé sur le domaine. Au lieu de cela, vous devez créer une application distincte pour chaque sous-domaine, comme suit:
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()
Vous pouvez également écrire votre propre sous-classe WSGIApplication qui sait comment gérer plusieurs hôtes.
Autres conseils
J'ai aimé l'idée de Nick mais j'avais un problème légèrement différent. Je voulais faire correspondre un sous-domaine spécifique pour le traiter un peu différemment, mais tous les autres sous-domaines doivent être gérés de la même manière. Voici donc mon exemple.
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()