Получение URL-адреса сервера в Google App Engine с использованием python
Как мне заставить App Engine генерировать URL-адрес сервера, на котором он в данный момент запущен?
Если приложение запущено на сервере разработки, оно должно вернуть
http://localhost:8080/
и если приложение запущено на серверах Google, оно должно вернуть
http://application-name.appspot.com
Ответы
Ответ 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.