为TurboGears2提供的基于路由的调度
项目描述
关于tgext.routes
tgext.routes提供了一种简单的方法将基于路由的调度集成到TurboGears2应用中。
安装
tgext.routes可以从pypi或bitbucket安装
pip install tgext.routes
应该适用于大多数用户
路由单个动作
通过@route装饰器进行路由匹配,每个公开的方法可以绑定到一个或多个路由。
唯一的要求是您从RoutedController实例继承。
通过@route装饰器注册的所有路由都从控制器挂载点开始注册。
以下示例将entry_by_date方法注册为类似/date/2012-01和/date/2012-01-01的url。
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。请注意,这将禁用整个控制器的 ObjectDispatch,因此您将无法从该控制器发送不提供路由的动作。
路由整个应用程序
RoutedController 也可以作为应用程序的 RootController 使用。在这种情况下,您甚至可以使用控制器 mapper 属性提供一个 routes.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'] 指定的路径中查找。在上一个例子中,将在 home.py 模块中查找 HomeController 类,通过其 index、jsonexposed 和 unexposed 方法来处理 /、/json 和 /unex 路径。
如果在同一个 RoutedController 内同时使用 mapper 属性和 @route 装饰器,则 @route 装饰器将在映射器路由之后应用。
有关路由的更多文档,请参阅 Routes 文档
继续关于 ObjectDispatch 的讨论
当使用 tgext.routes 作为主要的路由方法时,您可以使用 _dispatch 作为路由的 action 来告诉它继续使用 ObjectDispatch(或目标控制器提供的任何特定调度方法)。
默认情况下,由于路由是精确匹配的,提供 _dispatch 动作将不提供任何剩余部分,因此它只会调度到目标控制器的 index 方法。要继续使用 URL 的剩余部分进行调度,您可以使用 _dispatch 标签。
mapper.connect('/forsub{_dispatch:.*?}', controller='home', action='_dispatch')
这将调度到 HomeController,并继续使用 ObjectDispatch 处理 URL 中的 /forsub 部分之后的所有内容。
项目详情
tgext.routes-0.2.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e7c6a0763ae4590ec1e9cdd21327db58055cc3c6a9f90e1e6dd09945e0b9c28d |
|
MD5 | 94ee4e29e458fd8fbfd92c68245551d8 |
|
BLAKE2b-256 | 1991e184c42cdd4d01ddfab1f7f00672c47555c2f49b50f33236c3ce4d3c7bf1 |