TurboGears - Ganchos

Existem três maneiras no TurboGears de conectar comportamentos dentro dos aplicativos existentes.

  • Hook - É um mecanismo pelo qual é possível definir um evento e notificar os ouvintes registrados à medida que os eventos são emitidos.

  • Controller Wrapper- Fica entre o TurboGears e o controlador, de modo que é possível estender o controlador como um decorador. Portanto, ele pode ser anexado a qualquer aplicativo de controlador de terceiros.

  • Application Wrapper - É semelhante a qualquer middleware WSGI, mas funciona apenas no contexto do TurboGears.

Aqui neste capítulo, discutiremos como usar ganchos dentro de um aplicativo existente.

Ganchos

Ganchos são eventos registrados no arquivo de configuração do aplicativo app_cfg.py. Qualquer controlador é então conectado a esses eventos por decoradores de eventos.

Os seguintes ganchos são definidos no TurboGears -

Sr. Não. Ganchos e descrição
1

Startup()

apenas em todo o aplicativo, chamado quando o aplicativo é iniciado.

2

shutdown()

em todo o aplicativo, chamado quando o aplicativo é encerrado.

3

configure_new_app

novo aplicativo foi criado pelo configurador de aplicativos.

4

before_config(app)

apenas em todo o aplicativo, chamado logo após a criação do aplicativo, mas antes de configurar opções e middleware

5

after_config(app)

apenas em todo o aplicativo, chamado após terminar de configurar tudo.

6

before_validate

Chamado antes de realizar a validação

7

before_call

Chamado após a validação, antes de chamar o método do controlador real.

8

before_render

Chamado antes de renderizar um template de controlador, output é o valor de retorno do controlador.

9

after_render

Chamado após terminar a renderização de um template de controlador.

Registrar um gancho

A fim de register a Hook, criar funções em app_cfg.py e registrá-los usando o seguinte código -

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

No código a seguir, os ganchos on_startup, on_shutdown e before_render são registrados em 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)

O gancho before_render é registrado com uma função de controlador no Rootcontroller. Adicione o seguinte código em 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')

Quando o aplicativo é servido, a mensagem de inicialização é exibida no console.

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

Quando '/' URL é inserido no navegador, uma mensagem correspondente ao gancho before_render é exibida no console.

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