Подтвердить что ты не робот

Получение URL-адреса сервера в Google App Engine с использованием python

Как мне заставить App Engine генерировать URL-адрес сервера, на котором он в данный момент запущен?

Если приложение запущено на сервере разработки, оно должно вернуть

http://localhost:8080/

и если приложение запущено на серверах Google, оно должно вернуть

http://application-name.appspot.com
4b9b3361

Ответ 1

Вы можете получить URL-адрес, который использовался для того, чтобы сделать текущий запрос из вашего веб-обработчика через self.request.url, или вы могли бы объединить его вместе с помощью self.request.environ dict (о котором вы можете прочитать в Документы WebOb - запрос наследования от webob)

Вы не можете "получить URL-адрес для сервера", так как многие URL-адреса могут использоваться для указания одного и того же экземпляра.

Если ваша цель состоит в том, чтобы просто обнаружить, что вы находитесь в разработке или производстве, используйте:

'Development' in os.environ['SERVER_SOFTWARE']

Ответ 2

Вот альтернативный ответ.

from google.appengine.api import app_identity
server_url = app_identity.get_default_version_hostname()

На сервере разработчиков dev это будет показано:

локальный: 8080

и на appengine

your_app_id.appspot.com

Ответ 3

Если вы используете webapp2, так как рамочные возможности - это то, что вы уже используете маршрутизацию URI в своем веб-приложении.
http://webapp2.readthedocs.io/en/latest/guide/routing.html

app = webapp2.WSGIApplication([
    webapp2.Route('/', handler=HomeHandler, name='home'),
])

При создании URI с webapp2.uri_for() просто передайте атрибут _full=True для генерации абсолютного URI, включая текущий домен, порт и протокол в соответствии с текущей средой выполнения.

uri = uri_for('home')
# /

uri = uri_for('home', _full=True)
# http://localhost:8080/
# http://application-name.appspot.com/
# https://application-name.appspot.com/
# http://your-custom-domain.com/

Эта функция может использоваться в вашем коде Python или непосредственно из механизма шаблонов (если вы его зарегистрируете) - очень удобно.

Проверьте webapp2.Router.build() в ссылке API для полного объяснения параметров, используемых для создания URI.