2010-09-12 12 views

Répondre

5

La bonne façon d'analyser self.request.url est pas une expression régulière, mais avec le module de bibliothèque standard Python urlparse:

import urlparse 

... 

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

objet o sera une instance de la classe ParseResult avec des champs de type chaîne comme o.scheme (probablement http ;-) et o.netloc ('example.appspot.com' dans votre cas). Vous pouvez à nouveau regrouper certaines chaînes avec la fonction urlparse.urlunparse du même module, par ex.

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

qui vous donnera en s la chaîne 'http://example.appspot.com' dans ce cas.

+3

Ou vous pouvez simplement utiliser , par exemple, self.request.host_url, self.request.host, etc, qui ont déjà ces parties séparées pour vous! –

2

Si vous voulez simplement trouver votre identifiant d'application, vous pouvez l'obtenir à partir du environment sans avoir à analyser l'adresse URL actuelle. La variable d'environnement est APPLICATION_ID

Vous pouvez également l'utiliser pour trouver la version actuelle (CURRENT_VERSION_ID), domaine auth (qui vous permettra de savoir si vous êtes en cours d'exécution sur appspot.com, AUTH_DOMAIN) et si vous êtes en cours d'exécution sur le serveur de développement local ou en production (SERVER_SOFTWARE).

Donc, pour obtenir l'URL complète de base, essayez quelque chose comme ceci:

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] 

modifier:AUTH_DOMAIN contient le domaine personnalisé, pas besoin d'inclure l'ID d'application.

Ceci renvoie l'URL de base de la version actuelle, même si vous n'êtes pas accéder à la version actuelle, ou si vous visitez la version actuelle en utilisant une URL comme http://current-version.latest.app_id.appspot.com (contrairement aux méthodes URL parsing)

+0

Cela suppose que l'application est en cours d'exécution sur appspot, et échouera horriblement si votre URL de base se trouve sur un domaine Google Apps. – geoffspear

+0

@Wooble c'est ce que le bit 'AUTH_DOMAIN' est - s'il n'est pas hébergé sur appspot.com, le' AUTH_DOMAIN' est le domaine personnalisé où il est hébergé. –

+1

Une application peut utiliser Google auth mais être servie à partir d'un autre nom de domaine; l'envvar AUTH_DOMAIN sera toujours défini sur "gmail.com" – geoffspear

Questions connexes