基于路径的涡轮齿轮2调度
tgext.routes的Python项目详细描述
安装
tgext.routes既可以从pypi安装,也可以从bitbucket安装:
pip install tgext.routes
应该只对大多数用户有效
路由单个操作
路由匹配是通过@routedecorator完成的, 每个公开的方法可以绑定到一个或多个路由。
唯一的要求是从RoutedController实例继承。
通过@routedecorator注册的所有路由都是从 从控制器安装点。
下面的示例为如下URL注册entry_by_date方法 /date/2012-01和/date/2012-01-01:
from tgext.routes import RoutedController, route class DateController(RoutedController): @expose() @route('{year}-{month}', day=33) @route('{year}-{month}-{day}') def entry_by_date(self, year, month, day): return '%s ++ %s ++ %s' % (year, month, day) class RootController(BaseController): date = DateController() @expose() def index(self): return 'Hello!'
请记住,当@expose包装它时,方法仍然是 可通过objectdispatch路由访问,@route 注册其他路由。
如果有指向它的路由,也可以使用不提供 解决了@expose装饰,请记住在这种情况下 必须手动渲染模板。
如果要禁用objectdispatch可以设置disable_objectdispatch=True 在控制器内部。请记住,它将为 整个控制器,因此您将无法分派不提供 从那个控制器开始的路线。
路由整个应用程序
RoutedController也可以作为应用程序rootcontroller安装。 在这种情况下,您甚至可以提供 一个routes.Mapper对象作为控制器mapper属性和寄存器 应用程序的所有路径:
class RootController(RoutedController): mapper = Mapper() mapper.connect('/', controller='home', action='index') mapper.connect('/json', controller='home', action='jsonexposed') mapper.connect('/unex', controller='home', action='unexposed')
在这种情况下,需要controller参数,并且将查找控制器 在由tg.config['paths']['controllers']指定的路径内。在上一个 示例HomeController类将在home.py模块中查找 提供/,/json和/unex路径,它们通过index,jsonexposed和 unexposed方法。
如果mapper属性和@route装饰符都在同一个内部使用 RoutedController,在映射器路由之后应用@route装饰器。
有关路由的更多文档,请参阅Routes Documentation
继续使用objectdispatch
当使用tgext.routes作为主要路由方法时,可以告诉 它将继续使用objectdispatch(或提供的任何特定的分派方法 由目标控制器)使用调度作为路由的操作。
默认情况下,当路由完全匹配时,提供一个调度操作 不提供余数,因此它将只发送到目标控制器的index方法。 要继续使用url的剩余部分进行调度,可以使用 调度标签:
mapper.connect('/forsub{_dispatch:.*?}', controller='home', action='_dispatch')
这将发送到homecontroller继续对任何对象进行objectdispatch 它出现在url的/forsub部分之后。