Grok应用程序的Traject集成
megrok.traject的Python项目详细描述
梅格罗克悲剧
megrok.traject是集成traject路由的库 带有Grokweb框架的框架
通过将其添加到grok项目的 setup.py(在install_requires中)并重新运行构建。
外部轨迹
如果不直接控制 模型。例如,如果模型定义在 一个外部包。
使用megrok.traject,您可以在grok中声明如下的轨迹:
from megrok import traject class SomeTraject(traject.Traject): grok.context(App) pattern = 'departments/:department_id' model = Department def factory(department_id): return get_department(department_id) def arguments(department): return dict(department_id=department.id)
这个寄存器factory和arguments的逆函数 模式departments/:department_id、根App和 类Department这将替换中的register*函数 自取灭亡。
App是任何grok模型此模型现在自动允许 遍历关联的模式;系统注册一个自定义 快车来做这个。
您可以像往常一样为Department注册grok视图。
上下文问题
如果can,则使traject子类从 grokcore.component.Context(或其别名grok.Context,或其 别名traject.Context)。这样做可以避免问题 描述如下。
有时你不能从 grokcore.component.Context,但是。暴露外部模型 毕竟,梅格罗克·崔杰的设计初衷是允许的
当您在外部模型中使用megrok.traject时,可以遇到 您的模型存在以下两个问题:
ZTK假定对象的默认视图是index.html,而不是 index。index默认视图设置仅在以下情况下使用 从grokcore.component.Context为模型创建子类。你可以 通过添加 以下指令指向项目的configure.zcml:
<browser:defaultView for="SomeForeignModel" name="index" />
您还可以为一个公共基类执行此操作 模型共享,或者您知道的由所有人提供的公共接口 你的模特。
视图、适配器等不会自动与中的模型关联 相同的模块您需要显式地使用 grok.context()在模块或类级别上关联 组件。例如:
class SomeForeignModel(object): ... class MyView(grok.View): grok.context(SomeForeignModel)
垃圾模型
如果您自己可以控制模型定义,请执行traject 允许使用更紧凑的表示法来定义基于traject的 模型直接:
import traject class Department(traject.Model): traject.context(App) traject.pattern('departments/:department_id') def factory(department_id): return get_department(department_id) def arguments(self): return dict(department_id=self.id)
traject.Model从grokcore.component.Context派生,因此 上面提到的关于外部模型的问题在这里不成问题
请注意,在zodb的意义上,traject模型不是持久的。如果你 需要一个可以在grok.Model或 persistent.Persistent
提示
- 如果找不到模型,则返回工厂中的None。系统 然后返回正常遍历以查找视图我也是 使用任何参数都会破坏视图遍历。
- 使用megrok.traject.locate在请求之前定位对象 它的url或者在上面做checkPermission。如果对象被路由 要想已经使用megrok.traject,这是不必要的。这是 traject.locate的简单导入别名。
- 而不是通常的方法(被解释为函数) factory和arguments,还可以将它们转换为类 方法使用@classmethoddecorator。他们现在采取了 cls参数作为第一个参数,这是它们所属的类 定义于。如果您想使 这些函数的实现依赖于 类(例如model的值),这反过来可以是 有助于实现更多的声明性traject基类
有关详细信息,请参阅traject文档
changes.txt
1.0(2010-08-08)
- 现在还可以对factory和 arguments如果这些函数依赖于 关于定义它们的类的信息。
0.10.1(2010-01-25)
- 添加注释to有关从中派生模型的文档 grokcore.component.Context,或者做你不能做的事
- 出于方便起见,公开traject.Context。
- 修复了rest文档。
0.10(2009-11-30)
- 支持traject.Model,如果 模型由开发人员控制
0.9(2009-11-16)
- 首次公开发行