Как получить базовый URI в AppEngine?

Как я могу получить базовый URI в приложении Google AppEngine, написанном на Python? Я использую webapp framework.

например

  http://example.appspot.com/ 

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

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

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

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

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

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

Вы также можете использовать эту информацию для поиска текущей версии ( CURRENT_VERSION_ID ), домена auth (который позволит вам узнать, работаете ли вы на 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] 

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

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