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