TurboGears - 编写扩展
TurboGears 扩展由 tgext.* 包 标识。Gearbox 工具包提供 tgext 命令来创建示例扩展。例如 −
gearbox tgext -n myextension
此命令的其他可选参数是 −
--author − 包作者的姓名。
--email − 包作者的电子邮件。
--licence − 包使用的许可证。默认为 MIT。
--description −包的描述。
--keywords − 包关键字(默认:turbogears2.extension)。
这将创建一个 tgext.myextension 目录,其中包含一个简单的示例扩展。
在目录 − 内运行 setup.py
Python setup.py install
tgext/myextension 文件夹中的 _init_.py 文件包含 −
Plugme 函数 − 这是扩展的入口点。
SetupExtension 类 −扩展初始化在这里进行。
类内的 On_startup 函数 − 是在类内的 __call__ 函数上注册的钩子。
tgext\myextension\__init__.py 的简要版本。
from tg import config from tg import hooks from tg.configuration import milestones import logging log = logging.getLogger('tgext.myextension') def plugme(configurator, options = None): if options is None: options = {} log.info('Setting up tgext.myextension extension...') milestones.config_ready.register(SetupExtension(configurator)) return dict(appid='tgext.myextension') class SetupExtension(object): def __init__(self, configurator): self.configurator = configurator def __call__(self): log.info('>>> Public files path is %s' % config['paths']['static_files']) hooks.register('startup', self.on_startup) def echo_wrapper_factory(handler, config): def echo_wrapper(controller, environ, context): log.info('Serving: %s' % context.request.path) return handler(controller, environ, context) return echo_wrapper self.configurator.register_wrapper(echo_wrapper_factory) def on_startup(self): log.info('+ Application Running!')
安装扩展后,通过在应用程序的 app_cfg.py 配置文件中进行以下添加来启用它。
from tgext.myextension import plugme plugme(base_config)
如果我们使用 gearbox 服务器命令启动服务器,则可以通过以下命令在控制台上查看新注册扩展的通知 −
14:29:13,250 INFO [tgext.myextension] Setting up tgext.myextension extension... 14:29:13,453 INFO [tgext.myextension] >>> Public files path is c: ghello\hello\hello\public 14:29:13,453 INFO [tgext.myextension] + Application Running! Starting Standard HTTP server on http://127.0.0.1:8080