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'}