如何獲取用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