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)

这个寄存器factoryarguments的逆函数 模式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,而不是 indexindex默认视图设置仅在以下情况下使用 从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.Modelgrokcore.component.Context派生,因此 上面提到的关于外部模型的问题在这里不成问题

请注意,在zodb的意义上,traject模型不是持久的。如果你 需要一个可以在grok.Modelpersistent.Persistent

提示

  • 如果找不到模型,则返回工厂中的None。系统 然后返回正常遍历以查找视图我也是 使用任何参数都会破坏视图遍历。
  • 使用megrok.traject.locate在请求之前定位对象 它的url或者在上面做checkPermission。如果对象被路由 要想已经使用megrok.traject,这是不必要的。这是 traject.locate的简单导入别名。
  • 而不是通常的方法(被解释为函数) factoryarguments,还可以将它们转换为类 方法使用@classmethoddecorator。他们现在采取了 cls参数作为第一个参数,这是它们所属的类 定义于。如果您想使 这些函数的实现依赖于 类(例如model的值),这反过来可以是 有助于实现更多的声明性traject基类

有关详细信息,请参阅traject文档

changes.txt

1.0(2010-08-08)

  • 现在还可以对factoryarguments如果这些函数依赖于 关于定义它们的类的信息。

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)

  • 首次公开发行

下载

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在收到远程通知时对iBeacon进行java扫描   尝试在Java中实现MD5哈希的算法   java getLastLocation最近有多久了?   java线程创建侦听器   swing Java JComboBox接受ArrayList,但不显示ArrayList的项   构建服务器上的java XML验证速度较慢   Tomcat无法识别java中的更改(Intellij配置)   java 5中引入泛型的原因   java意图。Android中的额外_流   for循环Java直接遍历数组而不是数组变量   java内部类中的两个声明构造函数   java试图使用子文本字段在JPanel上设置边框   java如何允许在Android WebView中进行条带签出?   在Java中,如何将数字从一个类转移到另一个类?   从任务栏关闭浏览器时的java会话   java有没有一种自动化的方法来确保代码的所有部分都经过单元测试?   2DArrays Java编码查找数组