2010-09-12 3 views

ответ

5

Правильный способ разбора self.request.url не с регулярным выражением, но с urlparse модуль Python стандартной библиотеки:

import urlparse 

... 

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

Object o будет экземпляром ParseResult класса со строковыми значениями полей например o.scheme (возможно, http ;-) и o.netloc ('example.appspot.com' в вашем случае). Вы можете снова поместить некоторые из строк вместе с функцией urlparse.urlunparse из того же модуля, например.

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

который даст вам в s строку 'http://example.appspot.com' в этом случае.

+3

Или вы могли бы просто использовать , например, self.request.host_url, self.request.host и т. д., которые уже разделены на эти части! –

2

Если вы просто хотите найти свой идентификатор приложения, вы можете получить это из environment без необходимости синтаксического анализа текущего URL-адреса. Переменная окружения APPLICATION_ID

Вы также можете использовать это, чтобы найти текущую версию (CURRENT_VERSION_ID), домен аутентификации (который позволит вам знать, является ли вы работаете на appspot.com, AUTH_DOMAIN) и ли вы работаете на локальный сервер разработки или в производстве (SERVER_SOFTWARE).

Таким образом, чтобы получить полный базовый URL, попробовать что-то вроде этого:

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] 

редактировать:AUTH_DOMAIN содержит собственный домен, не нужно включать идентификатор приложения.

Это будет возвращать базовый URL текущей версии, даже если вы не имеет доступа к текущей версии, или если вы посещаете текущую версию, используя URL-адрес, как http://current-version.latest.app_id.appspot.com (в отличие от методов URL-синтаксического анализа)

+0

Предполагается, что приложение будет доступно на appspot, и будет ужасно неудачно, если ваш базовый URL-адрес находится в домене Google Apps. – geoffspear

+0

@Wooble - это то, что бит 'AUTH_DOMAIN' - если он не размещен на appspot.com,' AUTH_DOMAIN' - это настраиваемый домен, на котором он размещен. –

+1

Приложение может использовать Google auth, но все равно будет обслуживаться из другого доменного имени; AUTH_DOMAIN envvar по-прежнему будет установлен на "gmail.com" – geoffspear

Смежные вопросы