appengine_config.py
檔案是設定檔,可讓您指定
程式庫的安裝資料夾,並為 google.appengine 套件中的部分 Python 模組提供常數和「hook 函式」的自訂值。指定自訂值可能會變更應用程式所需相關 App Engine 服務的預設行為。您可以與 app.yaml
設定檔一起定義這個檔案,並與應用程式的其他程式碼一起部署。
使用 appengine_config.py 設定 Python 模組
App Engine 中的多個 Python 模組可透過 appengine_config.py
加以設定。
如要自訂服務的 Python 模組,請在該服務的根目錄中建立新的 appengine_config.py
檔案。如要使用這個檔案,您必須定義要覆寫的常數或 hook 函式,接著,請從 app.yaml
檔案所在的目錄執行 gcloud app
deploy
,重新部署應用程式和新的 appengine_config.py
檔案。您定義的常數和掛鉤函式,就會由這些 App Engine 服務在內部使用。
如要覆寫常數,請在常數名稱前面加上 Python 模組名稱和底線,然後指派值。舉例來說,如要編輯 appstats 中的覆寫,您可以定義 KEY_PREFIX
的值:
appstats_KEY_PREFIX = '__my_custom_prefix__'
在其他 Python 模組中,覆寫的掛鉤函式命名方式也類似。舉例來說,在
namespace_manager 中,您可以將 appengine_config.py
中的 hook 函式 default_namespace_for_request
覆寫為:
import os def namespace_manager_default_namespace_for_request(): return os.environ.get('HTTP_HOST', '')
App Engine 中可設定的 Python 模組
下列 Python 模組可使用 appengine_config.py
進行設定。按照慣例,hook 函式為小寫,常數為大寫:
-
default_namespace_for_request()
(預設會傳回None
)
- 請參閱
appengine/ext/appstats/recording.py 中的
class ConfigDefaults
- 請參閱 appengine/ext/appstats/sample_appengine_config.py 中的範例
BASE_PATH
(預設為'/_ah/datastore_admin'
)MAPREDUCE_PATH
(預設為'/_ah/mapreduce'
)CLEANUP_MAPREDUCE_STATE
(預設為True
)
CUSTOM_ENVIRONMENT_AUTHENTICATION
- 請參閱
appengine/ext/remote_api/handler.py 中的
class ConfigDefaults
透過 lib_config 設定自訂的 Python 模組
您也可以使用 appengine_config.py
中定義的常數和 hook 函式,透過 App Engine 設定自己的 Python 模組。
lib_config.register()
函式可讓您註冊使用者可覆寫的常數和鉤子的名稱,並在使用者不想覆寫時定義合理的預設值。在內部,lib_config.register()
會嘗試匯入 appengine_config
。如果成功,系統會將指定 Python 模組的預設值,替換為 appengine_config.py
中定義的值。
在 my_module.py
中的使用範例:
from google.appengine.api import lib_config def _hook_function1_default(): return 'baz' _config = lib_config.register('my_module', {'CONSTANT1': 'foo', 'CONSTANT2': 'bar', 'hook_function1': _hook_function1_default})
您現在可以將使用者的常數存取為:
_config.CONSTANT1 _config.CONSTANT2
並呼叫其 hook 函式為:
_config.hook_function1()
有些程式設計人員會將預設值集合為類別:
class _ConfigDefaults(object): CONSTANT1 = 'foo' CONSTANT2 = 'bar' def hook_function1(): return 'baz' _config = lib_config.register('my_module', _ConfigDefaults.__dict__)
如要覆寫預設值,使用者可以在 appengine_config.py
中定義:
my_module_CONSTANT1 = 'foofoo' my_module_hook_function1 = lambda: 'bazbaz'
因此,在 my_module.py
中,以下敘述為真:
_config.CONSTANT1
現在是'foofoo'
_config.CONSTANT2
仍為'bar'
_config.hook_function1()
傳回'bazbaz'
lib_config.register()
傳回之後,就可以立即在 my_module.py
中使用使用者覆寫值。