2009-05-08 14 views
19

¿Cómo puedo trabajar con el subdominio en el motor de la aplicación google (python)?Trabajando con el subdominio en el motor de la aplicación google

Quiero obtener la primera parte de dominio y tomar alguna medida (controlador).

Ejemplo:
          product.example.com -> enviarla al controlador de productos
          user.example.com -> enviarla al controlador de usuarios

En realidad, usando la ruta virtual tengo este código:

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

Respuesta

26

WSGIAplication no es capaz de enrutar en función del dominio. En su lugar, es necesario crear una solicitud por separado para cada subdominio, como esto:

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

Alternativamente, se podría escribir su propia subclase WSGIApplication que sabe cómo manejar múltiples hosts.

+0

¡Gracias! ¿Tiene alguna muestra de esta aplicación sub WSGIA para mí? Lo digo con Python ... – Zote

+0

Consulte la fuente de la actual en http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/webapp/__init__ .py - modificar el método __call__ para tener en cuenta el nombre de host debería ser bastante sencillo. –

+0

El código anterior no parece funcionar en producción con ambos subdominios vinculados a una aplicación GAE. ¿Alguien consiguió esto para trabajar? – kovshenin

2

Me gustó la idea de Nick, pero tuve un problema ligeramente diferente. Quería hacer coincidir un subdominio específico para manejarlo un poco diferente, pero todos los demás subdominios deberían manejarse de la misma manera. Así que aquí está mi ejemplo.

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