¿Cómo puedo obtener el URI base en una aplicación de Google App Engine escrito en Python? Estoy usando el framework webapp.¿Cómo puedo obtener el URI base en AppEngine?
p. Ej.
http://example.appspot.com/
¿Cómo puedo obtener el URI base en una aplicación de Google App Engine escrito en Python? Estoy usando el framework webapp.¿Cómo puedo obtener el URI base en AppEngine?
p. Ej.
http://example.appspot.com/
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.
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)
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
@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. –
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
O usted podría utilizar , por ejemplo, self.request.host_url, self.request.host, etc., que ya tienen estas partes divididas para usted. –