如何获取用Python编写的Google AppEngine应用程序中的基本URI?我正在使用webapp框架。如何获得AppEngine中的基础URI?
例如
http://example.appspot.com/
如何获取用Python编写的Google AppEngine应用程序中的基本URI?我正在使用webapp框架。如何获得AppEngine中的基础URI?
例如
http://example.appspot.com/
解析self.request.url
正确的方法是不使用正则表达式,但与Python标准库的urlparse模块:
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'
。
如果你只是想找到你的应用程序ID,你可以从environment得到它,而无需解析当前的URL。环境变量是APPLICATION_ID
也可以用它来找到最新的版本(CURRENT_VERSION_ID
),AUTH域(这将让你知道你在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]
编辑:AUTH_DOMAIN
包含自定义域,无需包括应用程序ID。
这将返回即使你没有访问当前的版本或当前版本的基础URL,如果你访问使用URL当前版本一样http://current-version.latest.app_id.appspot.com
(不像URL的解析方法)
这假设应用程序正在appspot上访问,并且如果您的基本URL位于Google Apps域上,则会失败。 – geoffspear 2010-09-13 03:48:56
@Wooble这就是'AUTH_DOMAIN'位 - 如果它没有托管在appspot.com上,则'AUTH_DOMAIN'是它托管的自定义域。 – 2010-09-13 04:35:07
应用可以使用Google身份验证,但仍可以使用其他域名提供服务; AUTH_DOMAIN envvar仍然会被设置为“gmail.com” – geoffspear 2010-09-14 00:28:13
或者你可以只使用,例如,self.request.host_url,self.request.host等,已经有这些部分分开给你! – 2010-09-13 10:01:33