适用于Grok应用程序的URL模式
项目描述
原始人常常通过树林中的动物踪迹狩猎。他们还可以沿着踪迹寻找重要的自然资源;人类第一次迁移可能就是沿着游牧动物群在访问天然盐矿时留下的踪迹。
秉承同样的传统,Trails产品提供了Python包megrok.trails,允许Grok网站开发者为用户提供访问网站中游荡对象的可访问URL。
如果您需要报告错误或想要请求功能,请访问项目的Launchpad站点:
Trails创建了两个遍历器,使得URL能够在正向方向工作(这样用户可以访问它们并查看正确的对象),同时也注册了生成URL所需的适配器(这意味着Grok可以询问“这个对象在哪个URL上?”并得到回答)。
当使用Trails时,它看起来可能如下所示
class MyTrails(megrok.trails.TrailHead): grok.context(MyApp) trails = [ Trail('/person/:id', Person), Trail('/account/:username', Account), ]
上面的示例创建了一个类似这样的URL
http://example.com/app/person/3096
遍历到通过调用Person(id=3096)创建的对象,而访问该URL的用户
http://example.com/app/account/dcr
将会找到通过调用 Account(username=dcr) 创建的对象。在每种情况下,Trail 中的冒号前缀 URL 元素都将成为作为 Trail() 的第二个参数提供的类(或其他可调用对象)的关键字参数。每个未冒号前缀的 URL 元素必须与提交 URL 中的对应元素进行字面匹配。
TrailHead 会遍历您为其命名的对象作为其 grok.context(),因此您不需要为该上下文定义 traverse() 方法或创建一个 grok.Traverser。当剩余的 URL 组件无法与从 TrailHead 开始的任何 Trail 模式匹配时,将引发错误,应向用户返回 404 Not Found(除非,当然,只剩下一个 URL 组件并且它命名了一个视图)。如果相反,其中一个 URL 模式匹配,那么在 Trail 的第二个参数中命名的对象将使用上面概述的冒号前缀通配符 URL 组件作为关键字参数实例化。
一旦匹配并解析到对象,Trails 的处理就完成了,然后正常的 Grok 遍历再次接管,以处理任何剩余的 URL 组件,或者如果在 URL 的末尾,寻找对象的默认视图。所以,在上面的例子中,为了使用户能够在浏览器中看到它们被渲染,开发者需要为 Person 和 Account 对象提供正常的 grok.View 类。这意味着 Trails 与类似 Rails Routes 或 Python Routes 的产品不可比,因为这些产品强加了它们自己的选择视图的方法;相比之下,Trails 仅尝试使对象遍历本身在对象数据库(如 ZODB)中不实际存在的应用程序中更干净、更容易维护;它仅仅尝试使对象遍历本身更干净、更容易维护。
请注意,一旦完成任何 Trail,Trails 就会停止并返回控制权给 Grok。因此,您不能有两个工作路径,其中一个路径是另一个路径的前缀;这里显示的第二个 Trail 将永远不会被使用。
trails = [ Trail('/person/:id', Person), Trail('/person/:id/:acct', BankAccount), # will never be used! ]
请记住,Trails 还注册了适配器,告诉 Grok 每种类型的对象在哪里,因此如果您,例如,正在将 Person 对象作为搜索结果的一部分渲染到一页上,那么您可以在每个对象上调用 view.url(person),并且 Trails 将为它们构建类似以下结构的 URL:
application_url + '/person/%s' % person.id
如果您的路径更雄心勃勃,如下所示:
Trail('/town/:name/:state', Town)
则特定城镇的 URL 将通过计算形成
application_url + '/town/%s/%s' % (town.name, town.state)
可能看起来像 /town/Springfield/MA。请注意,这意味着 Trails 对您命名为 Trail 的第二个参数的每个类都做出了两个假设:首先,它可以安全地使用类似冒号前缀通配符的 URL 模式关键字参数调用;其次,该类型的任何活动对象都将具有具有相同两个名称的属性,它可以查找以形成对象的 URL。
如果您对 Trails 有任何建议、错误报告或问题,请访问我们的项目页面(在 README 的顶部附近有链接)。祝您享受!
项目详情
megrok.trails-1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bb6350d8e9896b5ef55dcc7e68f5e3d3ebe168f41db33295cd69858c32767ff3 |
|
MD5 | 3349c3e47d51b6d0b2f9a027404d575b |
|
BLAKE2b-256 | 9f9720be7f325413ed696ef1c8babbd12b624d645ba26d4d8adf9908e452d11f |