2009-05-08 14 views
19

Come posso lavorare con il dominio secondario nel motore di app di google (python).Utilizzo del sottodominio nel motore di app di google

Voglio ottenere la prima parte del dominio e intraprendere qualche azione (gestore).

Esempio:
          product.example.com -> inviarlo a prodotti gestore
          user.example.com -> inviarlo al gestore utenti

In realtà, utilizzando percorso virtuale ho questo codice:

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

risposta

26

WSGIApplication non è in grado di eseguire il routing in base al dominio. Invece, è necessario creare un'applicazione separata per ogni sottodominio, come questo:

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

In alternativa, si potrebbe scrivere il proprio sottoclasse WSGIApplication che sa come gestire più host.

+0

Grazie! Hai qualche esempio di questa sub WSGIApplicazione? Sto affermando con Python ... – Zote

+0

Controlla la sorgente per quella corrente su http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/webapp/__init__ .py - La modifica del metodo __call__ per tenere conto dell'hostname dovrebbe essere abbastanza semplice. –

+0

Il codice sopra non sembra funzionare in produzione con entrambi i sottodomini collegati a un'app di GAE. Qualcuno l'ha fatto funzionare? – kovshenin

2

Mi è piaciuta l'idea di Nick ma ho avuto un problema leggermente diverso. Volevo abbinare uno specifico sottodominio per gestirlo in modo un po 'diverso, ma tutti gli altri sottodomini dovrebbero essere gestiti allo stesso modo. Quindi ecco il mio esempio.

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