Python 2 模組設定

Google App Engine 提供相關機制,可讓使用者針對常數與「hook 函式」指定自訂值以供 google.appengine 套件中的部分 Python 模組使用。指定自訂值可能會變更應用程式所需相關 App Engine 服務的預設行為。用來指定這些常數的檔案為 appengine_config.py。在您建立檔案後,請將檔案與其他程式碼一併部署

透過 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 服務就會在內部使用您定義的常數與 hook 函式。

如要覆寫常數,請在常數名稱的前面加上 Python 模組名稱和底線,然後指派其值。舉例來說,如要編輯 appstats 中的覆寫,您可以定義 KEY_PREFIX 的值:

appstats_KEY_PREFIX = '__my_custom_prefix__'

在其他 Python 模組中為覆寫的 hook 函式命名也是類似的方式。舉例來說,在 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 函式為小寫,常數為大寫:

namespace_manager
  • default_namespace_for_request() (預設傳回 None)

appstats

datastore_admin

  • BASE_PATH (預設為 '/_ah/datastore_admin')
  • MAPREDUCE_PATH (預設為 '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE (預設為 True)

remoteapi

透過 lib_config 設定自訂的 Python 模組

App Engine 也可讓您使用在 appengine_config.py 定義的常數與 hook 函式來設定自訂的 Python 模組。lib_config.register() 函式可讓您註冊使用者可覆寫的常數與 hook 函式的名稱,並定義有意義的預設值,以防範使用者不願覆寫的情況。就內部而言,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 中使用使用者覆寫值。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Python 2 適用的 App Engine 標準環境