Как я могу получить базовый URI в AppEngine? - PullRequest
9 голосов
/ 13 сентября 2010

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

, например

http://example.appspot.com/

Ответы [ 2 ]

5 голосов
/ 13 сентября 2010

Правильный способ анализа 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, '', '', '', ''))

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

2 голосов
/ 13 сентября 2010

Если вы просто хотите найти свой идентификатор приложения, вы можете получить его из среды , не анализируя текущий 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]

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...