В 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.