2010-09-12 17 views

Antwort

5

Der richtige Weg self.request.url zu analysieren ist nicht mit einem regulären Ausdruck, aber mit Python Standard urlparse Modul der Bibliothek:

import urlparse 

... 

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

Objekt o wird eine Instanz der ParseResult Klasse mit String-Wert von Feldern sein wie o.scheme (wahrscheinlich http ;-) und o.netloc ('example.appspot.com' in Ihrem Fall). Sie können einige der Strings wieder zusammen mit der urlparse.urlunparse-Funktion aus dem gleichen Modul, z.B.

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

, die Sie in s die Zeichenfolge 'http://example.appspot.com' in diesem Fall geben würde.

+3

Oder Sie könnten nur verwenden, besuchen Sie mit zB self.request.host_url, self.request.host, etc, die bereits diese Teile für Sie aufgeteilt haben! –

2

Wenn Sie nur Ihre App-ID finden möchten, können Sie diese von environment erhalten, ohne die aktuelle URL analysieren zu müssen. Die Umgebungsvariable ist APPLICATION_ID

Sie auch diese können Sie die aktuelle Version (CURRENT_VERSION_ID), Auth Domain finden (was Sie wissen lassen, ob Sie sich auf appspot.com laufen lassen, AUTH_DOMAIN) und ob Sie laufen auf der lokale Entwicklungsserver oder in Produktion (SERVER_SOFTWARE).

So die volle Basis-URL zu erhalten, versuchen Sie so etwas wie diese:

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] 

edit:AUTH_DOMAIN enthält die benutzerdefinierte Domain, keine Notwendigkeit, den App-ID enthalten.

Dadurch wird die aktuelle Version der Basis-URL zurück, auch wenn Sie die aktuelle Version nicht zuzugreifst, oder wenn Sie die aktuelle Version einer URL wie http://current-version.latest.app_id.appspot.com (im Gegensatz zu URL-Parsing-Verfahren)

+0

Hierbei wird davon ausgegangen, dass auf die App über den Appspot zugegriffen wird und dass die Basis-URL in einer Google Apps-Domain entsetzlich ausfallen wird. – geoffspear

+0

@Wooble das ist das 'AUTH_DOMAIN' Bit - wenn es nicht auf appspot.com gehostet wird, ist' AUTH_DOMAIN' die benutzerdefinierte Domäne, in der es gehostet wird. –

+1

Eine App kann die Google-Authentifizierung verwenden, jedoch weiterhin von einem anderen Domainnamen geschaltet werden. Die Umgebungsvariable AUTH_DOMAIN wird weiterhin auf "gmail.com" gesetzt. – geoffspear

Verwandte Themen