- TurboGears 教程
- TurboGears - 主页
- TurboGears - 概述
- TurboGears - 环境
- TurboGears - 第一个程序
- TurboGears - 依赖关系
- TurboGears - 服务模板
- TurboGears - HTTP 方法
- Genshi模板语言
- TurboGears - 包括
- TurboGears - JSON 渲染
- TurboGears - URL 层次结构
- TurboGears - Toscawidgets 表格
- TurboGears - 验证
- TurboGears - 闪讯
- TurboGears - Cookie 和会话
- TurboGears - 缓存
- TurboGears - Sqlalchemy
- TurboGears - 创建模型
- TurboGears - 原油操作
- TurboGears - 数据网格
- TurboGears - 分页
- TurboGears - 管理员访问
- 授权与认证
- TurboGears - 使用 MongoDB
- TurboGears - 脚手架
- TurboGears - 挂钩
- TurboGears - 编写扩展
- TurboGears - 可插拔应用
- TurboGears - 安静的应用程序
- TurboGears - 部署
- TurboGears 有用资源
- TurboGears - 快速指南
- TurboGears - 有用的资源
- TurboGears - 讨论
TurboGears – 挂钩
TurboGears 中有三种方法可以将Behave插入现有应用程序中。
钩子- 这是一种可以定义事件并在事件发出时通知注册侦听器的机制。
控制器包装器- 它位于 TurboGears 和控制器之间,因此可以像装饰器一样扩展控制器。因此,它可以附加到任何第三方控制器应用程序。
应用程序包装器- 它类似于任何 WSGI 中间件,但仅在 TurboGears 上下文中工作。
在本章中,我们将讨论如何在现有应用程序中使用钩子。
挂钩
挂钩是在应用程序的配置文件app_cfg.py中注册的事件。然后,任何控制器都通过事件装饰器挂钩到这些事件。
TurboGears 中定义了以下钩子 -
先生。 | 挂钩和说明 |
---|---|
1 | 启动() 仅限应用程序范围,在应用程序启动时调用。 |
2 | 关闭() 仅在应用程序范围内,在应用程序退出时调用。 |
3 | 配置新应用程序 新应用程序由应用程序配置器创建。 |
4 | 之前的配置(应用程序) 仅在应用程序范围内,在创建应用程序之后、设置选项和中间件之前立即调用 |
5 | after_config(应用程序) 仅限应用程序范围,在完成所有设置后调用。 |
6 | 验证前 在执行验证之前调用 |
7 | 调用前 在验证之后、调用实际控制器方法之前调用。 |
8 | 渲染前 在渲染控制器模板之前调用,输出是控制器返回值。 |
9 | 渲染后 渲染完控制器模板后调用。 |
注册一个钩子
为了注册 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'}