Turbogears-hooks

提供:Dev Guides
移動先:案内検索

TurboGears –フック

TurboGearsには、既存のアプリケーション内で動作をプラグインする3つの方法があります。

  • フック-これは、イベントを定義し、登録されたリスナーにイベントが発行されたときに通知するメカニズムです。
  • Controller Wrapper -TurboGearsとControllerの間に位置するため、コントローラーをデコレータのように拡張できます。 したがって、任意のサードパーティ製コントローラーアプリケーションに接続できます。
  • アプリケーションラッパー-WSGIミドルウェアに似ていますが、TurboGearsコンテキストでのみ動作します。

この章では、既存のアプリケーション内でフックを使用する方法について説明します。

フック

フックは、アプリケーションの構成ファイル app_cfg.py に登録されたイベントです。 次に、イベントデコレータによってこれらのイベントにコントローラがフックされます。

次のフックはTurboGearsで定義されています-

Sr.No. Hooks & Description
1

Startup()

アプリケーション全体のみ。アプリケーションの起動時に呼び出されます。

2

shutdown()

アプリケーション全体のみ。アプリケーションの終了時に呼び出されます。

3

configure_new_app

新しいアプリケーションは、アプリケーションコンフィギュレータによって作成されました。

4

before_config(app)

アプリケーション全体のみ。アプリケーションの作成直後、ただしオプションとミドルウェアをセットアップする前に呼び出されます

5

after_config(app)

アプリケーション全体でのみ、すべての設定が完了した後に呼び出されます。

6

before_validate

検証を実行する前に呼び出されます

7

before_call

検証後、実際のコントローラーメソッドを呼び出す前に呼び出されます。

8

before_render

コントローラーテンプレートをレンダリングする前に呼び出され、出力はコントローラーの戻り値です。

9

after_render

コントローラーテンプレートのレンダリングが完了した後に呼び出されます。

フックを登録する

フックを登録するには、 app_cfg.py に関数を作成し、次のコードを使用して登録します-

tg.hooks.register(hookane, function, controller)

次のコードでは、on_startup、on_shutdown、before_renderフックがapp_cfg.pyに登録されています。

def on_startup():
   print 'hello, startup world'

def on_shutdown():
   print 'hello, shutdown world'

def before_render(remainder, params, output):
   print 'system wide before render'

# ... (base_config init code)
tg.hooks.register('startup', on_startup)
tg.hooks.register('shutdown', on_shutdown)
tg.hooks.register('before_render', before_render)

before_renderフックは、Rootcontrollerのコントローラー関数に登録されます。 controllers \ root.pyに次のコードを追加します。

from tg.decorators import before_render

class RootController(BaseController):
   @expose('hello.templates.index')
   @before_render(before_render_cb)

   def index(self, *args, **kw):
      return dict(page = 'index')

アプリケーションが提供されると、コンソールに起動メッセージが表示されます。

hello, startup world
Starting Standard HTTP server on http://127.0.0.1:8080

ブラウザに「/」URLが入力されると、before_renderフックに対応するメッセージがコンソールに表示されます。

system wide before render
Going to render {'page': 'index'}