2010-09-12 13 views

cevap

5

self.request.url ayrıştırmak için uygun yolu normal bir ifade ile değil, Python standart kütüphanenin urlparse modülü ile:

import urlparse 

... 

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

Nesne o dizge değerli alanlarla ParseResult sınıfının bir örneği olur o.scheme (muhtemelen sizin durumunuzda http ;-) ve o.netloc ('example.appspot.com'). Aynı modülden urlparse.urlunparse işlevini kullanarak dizelerin bir kısmını tekrar bir araya getirebilirsiniz, örn. s bu durumda dize 'http://example.appspot.com' size verecekti

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

.

+3

bir URL kullanarak geçerli sürümü ziyaret Ya da sadece kullanabilirsiniz eğer Örneğin, bu parçaları zaten sizin için ayıran self.request.host_url, self.request.host, vb. –

2

Sadece uygulama kimliğinizi bulmak istiyorsanız, geçerli URL'yi ayrıştırmadan environment'dan edinebilirsiniz. çevre değişkeni Ayrıca (Eğer, appspot.com üzerinde AUTH_DOMAIN kalıp kalmadığını kontrol bildiririz) geçerli sürümü (CURRENT_VERSION_ID), yetkilendirme alanını bulmak için kullanabilir APPLICATION_ID

ve çalıştırdığınız olup olmadığıdır yerel geliştirme sunucusu veya üretimde (SERVER_SOFTWARE).

Yani, tam baz URL almak böyle bir şey denemek:

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] 

düzenleme:AUTH_DOMAIN özel alan adı, uygulama kimliğini içerecek şekilde gerek içerir.

Bu güncel sürümünü erişme veya olmasalar bile geçerli sürümün temel URL'sini dönecektir sen (URL-ayrıştırma yöntemlerinin aksine) http://current-version.latest.app_id.appspot.com gibi

+0

Bu, uygulamanın appspot'ta erişildiğini varsayar ve temel URL'niz bir Google Apps alanındaysa korkunç bir şekilde başarısız olur. – geoffspear

+0

@Wooble, AUTH_DOMAIN öğesinin biti budur - appspot.com'da barındırılmamışsa, "AUTH_DOMAIN", barındırıldığı özel alan adıdır. –

+1

Bir uygulama Google auth'u kullanabilir, ancak yine de başka bir alan adından sunulabilir; AUTH_DOMAIN envvar hala "gmail.com" olarak ayarlanacak – geoffspear