跳转到主要内容

为TurboGears2提供的基于路由的调度

项目描述

关于tgext.routes

https://travis-ci.org/TurboGears/tgext.routes.png https://coveralls.io/repos/TurboGears/tgext.routes/badge.png https://img.shields.io/:license-mit-blue.svg?style=flat-square

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 类,通过其 indexjsonexposedunexposed 方法来处理 //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 (5.8 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面