Учебники

TurboGears — Крючки

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

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

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

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

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

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

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

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

Крючки

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

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

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

Запускать()

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

2

неисправность()

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

3

configure_new_app

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

4

before_config (приложение)

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

5

after_config (приложение)

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

6

before_validate

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

7

before_call

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

8

before_render

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

9

after_render

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

Запускать()

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

неисправность()

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

configure_new_app

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

before_config (приложение)

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

after_config (приложение)

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

before_validate

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

before_call

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

before_render

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

after_render

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

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

Чтобы зарегистрировать хук, создайте функции в 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.