2010-09-12 13 views

Respuesta

5

La forma correcta de analizar self.request.url no es con una expresión regular, pero con urlparse módulo de Python biblioteca estándar:

import urlparse 

... 

o = urlparse.urlparse(self.request.url) 

objeto o habrá una instancia de la clase ParseResult con campos de cadena de valor como o.scheme (probablemente http ;-) y o.netloc ('example.appspot.com' en su caso). Puede volver a juntar algunas de las cadenas con la función urlparse.urlunparse del mismo módulo, p.

s = urlparse.urlunparse((o.scheme, o.netloc, '', '', '', '')) 

que le daría en s la cadena 'http://example.appspot.com' en este caso.

+3

O usted podría utilizar , por ejemplo, self.request.host_url, self.request.host, etc., que ya tienen estas partes divididas para usted. –

2

Si solo quiere encontrar su ID de aplicación, puede obtenerla desde el environment sin tener que analizar la URL actual. La variable de entorno es APPLICATION_ID

También puede utilizar esto para encontrar la versión actual (CURRENT_VERSION_ID), el dominio de autenticación (que le permitirá saber si se está ejecutando en appspot.com, AUTH_DOMAIN) y si se está ejecutando en el servidor de desarrollo local o en producción (SERVER_SOFTWARE).

Así que para obtener la URL base completa, intentar algo como esto:

import os 

def get_base_url(): 
    if os.environ[AUTH_DOMAIN] == "gmail.com": 
     app_id = os.environ[APPLICATION_ID] 
     return "http://" + app_id + ".appspot.com" 
    else: 
     return "http://" + os.environ[AUTH_DOMAIN] 

edición:AUTH_DOMAIN contiene el dominio personalizado, sin necesidad de incluir el ID de aplicación.

Esto devolverá URL base de la versión actual, incluso si no está accediendo a la versión actual, o si usted visita la versión actual utilizando una URL como http://current-version.latest.app_id.appspot.com (a diferencia de los métodos de URL de análisis sintáctico)

+0

Esto supone que se está accediendo a la aplicación en el sitio de aplicaciones, y fallará horriblemente si su URL base está en un dominio de Google Apps. – geoffspear

+0

@Wooble eso es lo que dice el bit 'AUTH_DOMAIN'; si no está alojado en appspot.com, el' AUTH_DOMAIN' es el dominio personalizado donde está alojado. –

+1

Una aplicación puede usar la autenticación de Google, pero aún se sirve desde otro nombre de dominio; el envvar AUTH_DOMAIN se establecerá en "gmail.com" – geoffspear

Cuestiones relacionadas