TurboGears - крючки

В TurboGears есть три способа включить поведение в существующие приложения.

  • Hook - Это механизм, с помощью которого можно определить событие и уведомить зарегистрированных слушателей, как и когда события генерируются.

  • Controller Wrapper- Он находится между TurboGears и Контроллером, поэтому его можно расширить как декоратор. Таким образом, его можно прикрепить к любому стороннему приложению контроллера.

  • Application Wrapper - Он похож на любое промежуточное ПО WSGI, но работает только в контексте TurboGears.

В этой главе мы обсудим, как использовать хуки внутри существующего приложения.

Крючки

Хуки - это события, зарегистрированные в файле конфигурации приложения. app_cfg.py. Затем любой контроллер подключается к этим событиям декораторами событий.

Следующие крючки определены в TurboGears -

Sr. No. Крючки и описание
1

Startup()

только для всего приложения, вызывается при запуске приложения.

2

shutdown()

только для всего приложения, вызывается при выходе из приложения.

3

configure_new_app

новое приложение создано конфигуратором приложений.

4

before_config(app)

только для всего приложения, вызывается сразу после создания приложения, но перед настройкой параметров и промежуточного программного обеспечения

5

after_config(app)

только для всего приложения, вызывается после завершения настройки.

6

before_validate

Вызывается перед выполнением проверки

7

before_call

Вызывается после проверки перед вызовом фактического метода контроллера.

8

before_render

Вызывается перед отрисовкой шаблона контроллера, output - это возвращаемое значение контроллера.

9

after_render

Вызывается после завершения рендеринга шаблона контроллера.

Зарегистрировать крючок

Чтобы register a Hook, создавать функции в app_cfg.py а затем зарегистрируйте их, используя следующий код -

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

В следующем коде хуки on_startup, on_shutdown и before_render зарегистрированы в 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)

Хук before_render регистрируется функцией контроллера в Rootcontroller. Добавьте следующий код в 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')

Когда приложение обслуживается, в консоли отображается сообщение о запуске.

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

Когда в браузере вводится URL-адрес '/', на консоли отображается сообщение, соответствующее хуку before_render.

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