Arbeiten mit Sub-Domain in Google App Engine
-
10-07-2019 - |
Frage
Wie kann ich mit Sub-Domain in Google App Engine (Python) arbeiten.
Ich will ersten Domain-Teil bekommen und eine Aktion (Handler) nehmen.
Beispiel:
product.example.com -> es um Produkte Handler
senden
user.example.com -> es den Benutzern Handler senden
Eigentlich mit virtuellem Pfad Ich habe diesen Code:
application = webapp.WSGIApplication(
[('/', IndexHandler),
('/product/(.*)', ProductHandler),
('/user/(.*)', UserHandler)
]
Lösung
WSGIApplication ist nicht in der Lage Routing basierend auf Domäne. Stattdessen müssen Sie eine separate Anwendung für jede Sub-Domain erstellen, wie folgt aus:
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()
Alternativ können Sie Ihre eigene WSGIApplication Unterklasse schreiben, der weiß, wie mehrere Hosts zu behandeln.
Andere Tipps
Ich mochte die Idee von Nick, aber ich hatte eine etwas andere Frage. Ich wollte eine bestimmte Sub-Domain übereinstimmen es ein bisschen anders zu handhaben, sondern auch alle anderen Sub-Domains sollten die gleiche behandelt werden. So, hier ist mein Beispiel.
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()