【问题标题】:Getting the Server URL in Google App Engine using python使用 python 在 Google App Engine 中获取服务器 URL
【发布时间】:2011-09-16 10:32:31
【问题描述】:

如何让 App Engine 生成当前运行的服务器的 URL?

如果应用程序在开发服务器上运行,它应该返回

http://localhost:8080/

如果应用程序在 Google 的服务器上运行,它应该返回

http://application-name.appspot.com

【问题讨论】:

    标签: python google-app-engine url web-applications


    【解决方案1】:

    您可以通过 self.request.url 从您的 webapp 处理程序中获取用于发出当前请求的 URL,或者您可以使用 self.request.environ dict 将其拼凑在一起(您可以在 WebOb docs 上阅读 - 请求继承自 webob)

    您不能“获取服务器的 url”本身,因为可以使用许多 url 来指向同一个实例。

    如果您的目标真的只是发现您是处于开发阶段还是生产阶段,请使用:

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

    【讨论】:

    • +1 试图猜测实际意图并让他知道开发服务器标志。
    • self.request.host 是获取当前主机名的更好方法,如果您需要协议前缀,则为 self.request.host_url
    【解决方案2】:

    这是另一个答案。

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

    在开发应用服务器上会显示:

    本地主机:8080

    在应用引擎上

    your_app_id.appspot.com

    【讨论】:

    【解决方案3】:

    如果您使用 webapp2 作为框架,那么您可能已经在 Web 应用程序中使用了 URI 路由。
    http://webapp2.readthedocs.io/en/latest/guide/routing.html

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

    在使用webapp2.uri_for() 构建URI 时,只需传递_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 代码中使用,也可以直接从模板引擎中使用(如果你注册的话)——非常方便。

    查看 API 参考中的webapp2.Router.build(),了解用于构建 URI 的参数的完整说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多