TurboGears - Haczyki

Istnieją trzy sposoby w TurboGears na podłączenie zachowań w istniejących aplikacjach.

  • Hook - Jest to mechanizm, za pomocą którego można zdefiniować zdarzenie i powiadomić zarejestrowanych słuchaczy o ich emisji.

  • Controller Wrapper- Znajduje się między TurboGears a kontrolerem, dzięki czemu można rozszerzyć kontroler jak dekorator. W ten sposób można go dołączyć do dowolnej aplikacji kontrolera innej firmy.

  • Application Wrapper - Jest podobny do każdego oprogramowania pośredniego WSGI, ale działa tylko w kontekście TurboGears.

W tym rozdziale omówimy, jak używać haków wewnątrz istniejącej aplikacji.

Haczyki

Hooki to zdarzenia zarejestrowane w pliku konfiguracyjnym aplikacji app_cfg.py. Każdy kontroler jest następnie podłączany do tych wydarzeń przez dekoratorów wydarzeń.

Następujące haki są zdefiniowane w TurboGears -

Sr.No. Haczyki i opis
1

Startup()

tylko dla całej aplikacji, wywoływane podczas uruchamiania aplikacji.

2

shutdown()

tylko dla całej aplikacji, wywoływana po zamknięciu aplikacji.

3

configure_new_app

nowa aplikacja została utworzona przez konfigurator aplikacji.

4

before_config(app)

tylko dla całej aplikacji, wywoływane zaraz po utworzeniu aplikacji, ale przed skonfigurowaniem opcji i oprogramowania pośredniego

5

after_config(app)

tylko szeroka aplikacja, wywoływana po zakończeniu konfiguracji.

6

before_validate

Wywoływane przed wykonaniem walidacji

7

before_call

Wywoływane po walidacji, przed wywołaniem rzeczywistej metody kontrolera.

8

before_render

Wywoływane przed renderowaniem szablonu kontrolera dane wyjściowe to wartość zwracana przez kontroler.

9

after_render

Wywoływane po zakończeniu renderowania szablonu kontrolera.

Zarejestruj hook

W celu register a Hook, tworzyć funkcje w app_cfg.py a następnie zarejestruj je za pomocą następującego kodu -

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

W poniższym kodzie zaczepki on_startup, on_shutdown i before_render są zarejestrowane w 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)

Hak before_render jest zarejestrowany w funkcji kontrolera w Rootcontroller. Dodaj następujący kod w pliku 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')

Gdy aplikacja jest obsługiwana, w konsoli wyświetlany jest komunikat startowy.

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

Po wpisaniu adresu URL „/” w przeglądarce na konsoli zostanie wyświetlony komunikat odpowiadający hakowi before_render.

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