2009-05-08 20 views
19

Jak mogę pracować z subdomeną w silniku aplikacji Google (python).Praca z subdomeną w silniku aplikacji Google

Chcę uzyskać część pierwszej domeny i podjąć pewne działanie (program obsługi).

Przykład:
          product.example.com -> wysłać go do produktów obsługi
          user.example.com -> wysłać go do użytkowników obsługi

W rzeczywistości przy użyciu ścieżki wirtualnej mam ten kod:

application = webapp.WSGIApplication(
    [('/', IndexHandler), 
    ('/product/(.*)', ProductHandler), 
    ('/user/(.*)', UserHandler) 
    ] 

Odpowiedz

26

WSGIApplication nie może routować w oparciu o domenę. Zamiast tego, należy utworzyć osobny wniosek dla każdej subdomeny, tak:

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() 

Alternatywnie, można napisać własną podklasę WSGIApplication, który wie, jak obsługiwać wiele hostów.

+0

Dziękujemy! Czy masz dla mnie przykład tej sub-WSGIApplication? Piszę w pythonie ... – Zote

+0

Sprawdź źródło bieżącego źródła na stronie http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/webapp/__init__ .py - modyfikowanie metody __call__ w celu uwzględnienia nazwy hosta powinno być dość proste. –

+0

Powyższy kod wydaje się nie działać w produkcji z obiema subdomenami powiązanymi z jedną aplikacją GAE. Czy ktokolwiek to zrobił? – kovshenin

2

Podobał mi się pomysł od Nicka, ale miałem nieco inny problem. Chciałem dopasować jedną konkretną subdomenę do obsługi nieco innej, ale wszystkie inne subdomeny powinny być traktowane tak samo. Oto mój przykład.

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() 
Powiązane problemy