我找到了一个非常方便的函数google.appengine.api.modules.modules.get_hostname()
,它允许我的Python应用程序在Google App Engine上运行时检索自己的主机名。
我在我的应用程序中构建了一个辅助函数,它借助此函数构造绝对URL。这些URL在测试中非常有用,因为它们允许我将OAuth流等内容返回到正确的位置。
import six
from google.appengine.api.modules.modules import get_hostname
INSECURE_HOST_WHITELIST = ('localhost',)
def get_redirect_url(path, secure=None):
assert isinstance(path, six.string_types), "The path argument must be a string."
if path:
path = '/' + path.lstrip('/')
hostname = get_hostname()
port = None
try:
hostname, port = hostname.split(':', 1)
except ValueError:
pass
if secure is None:
if hostname.lower() in INSECURE_HOST_WHITELIST:
secure = False
else:
secure = True
schema = 'http' + ('s' if secure else '')
return schema + '://' + hostname + (':' + port if port is not None else '') + path
然而,在制作中,此功能的用处要小得多,因为如果我的用户通过类似https://www.myawesomeapp.com/的内容访问我的应用,我不希望OAuth流程将其返回到{{{ 3}}
我的问题是:我的帮助函数是否有办法发现它是否正在运行升级模块(即接收流量的模块),并相应地返回规范服务器主机名?