Как получить базовый URI в приложении Google AppEngine, написанном на Python? Я использую webapp framework.Как я могу получить базовый URI в AppEngine?
например.
http://example.appspot.com/
Как получить базовый URI в приложении Google AppEngine, написанном на Python? Я использую webapp framework.Как я могу получить базовый URI в AppEngine?
например.
http://example.appspot.com/
Правильный способ разбора 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'
в этом случае.
Если вы просто хотите найти свой идентификатор приложения, вы можете получить это из 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-синтаксического анализа)
Предполагается, что приложение будет доступно на appspot, и будет ужасно неудачно, если ваш базовый URL-адрес находится в домене Google Apps. – geoffspear
@Wooble - это то, что бит 'AUTH_DOMAIN' - если он не размещен на appspot.com,' AUTH_DOMAIN' - это настраиваемый домен, на котором он размещен. –
Приложение может использовать Google auth, но все равно будет обслуживаться из другого доменного имени; AUTH_DOMAIN envvar по-прежнему будет установлен на "gmail.com" – geoffspear
Или вы могли бы просто использовать , например, self.request.host_url, self.request.host и т. д., которые уже разделены на эти части! –