TurboGears - Ganci

Ci sono tre modi in TurboGears per collegare comportamenti all'interno delle applicazioni esistenti.

  • Hook - È un meccanismo mediante il quale è possibile definire un evento e notificare ai listener registrati come e quando gli eventi vengono emessi.

  • Controller Wrapper- Si trova tra TurboGears e Controller, in modo che sia possibile estendere il controller come un decoratore. Pertanto, può essere collegato a qualsiasi applicazione controller di terze parti.

  • Application Wrapper - È simile a qualsiasi middleware WSGI, ma funziona solo nel contesto TurboGears.

In questo capitolo, discuteremo come utilizzare gli hook all'interno di un'applicazione esistente.

Ganci

Gli hook sono eventi registrati nel file di configurazione dell'applicazione app_cfg.py. Qualsiasi controller viene quindi agganciato a questi eventi dai decoratori di eventi.

I seguenti hook sono definiti in TurboGears:

Sr.No. Ganci e descrizione
1

Startup()

solo a livello di applicazione, chiamato all'avvio dell'applicazione.

2

shutdown()

solo a livello di applicazione, chiamato quando l'applicazione esce.

3

configure_new_app

nuova applicazione è stata creata dal configuratore dell'applicazione.

4

before_config(app)

solo a livello di applicazione, chiamato subito dopo la creazione dell'applicazione, ma prima di impostare le opzioni e il middleware

5

after_config(app)

solo a livello di applicazione, chiamato dopo aver finito di impostare tutto.

6

before_validate

Chiamato prima di eseguire la convalida

7

before_call

Chiamato dopo la convalida, prima di chiamare il metodo del controller effettivo.

8

before_render

Chiamato prima del rendering di un modello di controller, output è il valore restituito dal controller.

9

after_render

Chiamato dopo aver terminato il rendering di un modello di controller.

Registra un Hook

In modo da register a Hook, creare funzioni in app_cfg.py e quindi registrarli utilizzando il codice seguente:

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

Nel codice seguente, gli hook on_startup, on_shutdown e before_render sono registrati in 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)

L'hook before_render è registrato con una funzione controller nel Rootcontroller. Aggiungi il codice seguente in 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 l'applicazione è servita, il messaggio di avvio viene visualizzato nella console.

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

Quando l'URL "/" viene immesso nel browser, sulla console viene visualizzato un messaggio corrispondente all'hook before_render.

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