TurboGears - Ganchos

Hay tres formas en TurboGears de conectar comportamientos dentro de las aplicaciones existentes.

  • Hook - Es un mecanismo mediante el cual es posible definir un evento y notificar a los oyentes registrados cuando se emiten los eventos.

  • Controller Wrapper- Se encuentra entre TurboGears y Controller, por lo que es posible extender el controlador como un decorador. Por lo tanto, se puede adjuntar a cualquier aplicación de controlador de terceros.

  • Application Wrapper - Es similar a cualquier middleware WSGI, pero solo funciona en el contexto TurboGears.

Aquí, en este capítulo, discutiremos cómo usar los ganchos dentro de una aplicación existente.

Manos

Los hooks son eventos registrados en el archivo de configuración de la aplicación. app_cfg.py. A continuación, los decoradores de eventos conectan cualquier controlador a estos eventos.

Los siguientes ganchos están definidos en TurboGears:

No Señor. Ganchos y descripción
1

Startup()

solo para toda la aplicación, se llama cuando se inicia la aplicación.

2

shutdown()

solo para toda la aplicación, se llama cuando se cierra la aplicación.

3

configure_new_app

nueva aplicación creada por el configurador de aplicaciones.

4

before_config(app)

solo para toda la aplicación, llamado justo después de crear la aplicación, pero antes de configurar las opciones y el middleware

5

after_config(app)

solo para toda la aplicación, se llama después de terminar de configurar todo.

6

before_validate

Llamado antes de realizar la validación

7

before_call

Se llama después de la validación, antes de llamar al método del controlador real.

8

before_render

Llamado antes de renderizar una plantilla de controlador, la salida es el valor de retorno del controlador.

9

after_render

Se llama después de terminar de renderizar una plantilla de controlador.

Registrar un gancho

A fin de que register a Hook, crear funciones en app_cfg.py y luego regístrelos usando el siguiente código -

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

En el siguiente código, los ganchos on_startup, on_shutdown y before_render están registrados en 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)

El gancho before_render se registra con una función de controlador en el Rootcontroller. Agregue el siguiente código en 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')

Cuando se sirve la aplicación, se muestra el mensaje de inicio en la consola.

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

Cuando se ingresa la URL '/' en el navegador, se muestra en la consola un mensaje correspondiente al gancho before_render.

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