【发布时间】:2012-01-15 16:58:28
【问题描述】:
我在处理我的 Pyramid Web 应用程序时遇到了问题。我的结构非常类似于 Michael Merickel here 所描述的结构,除了我使用纯遍历来查找我的视图。 (它们被声明为配置了 context='path.toResource' name='myView'),根据我从traversal wiki tutorial. 可以看出的相当标准的票价虽然我的应用程序具有更复杂的 URL 结构:我的用户资源在 @ 987654323@ 和我的项目在/projects/{project_id} 下。我的所有资源都使用 SQLAlchemy ORM 进行持久化;我有一个带有__name__ 和__parent__ 属性的用户和项目类,以及扩展列的其他属性。
class User(Base):
id = Column(...)
__name__ = None
__parent__ = None
Class Project(Base):
id = Column(...)
__name__ = None
__parent__ = None
owner_id = Column(...ForeignKey(User.id))
owner = relationship(User,...)
我有一个 RootFactory、ProjectFactory 和 UserFactory,它们在 __get_item__ 调用中填充了适当的 __name__ 和 __parent__ 属性。
因此,在 Project 上下文的视图函数中,我在 request.context 中获得了一个 Project 实例。我的问题是如何引用相应的用户实例?我不能做 project.owner,因为那个 User 实例没有通过 RootFactory 链,所以它的 __parent__ 和 __name__ 值没有设置。这很糟糕,因为我想使用 request.resource_url 找到所有者用户的 URL,所以我可以在查看页面上放一个链接。
这里的解决方案是什么?我是否通过 request.root 完成所有操作?如果我想创建一个返回 User 或 Project 实例的复杂查询怎么办?是否有某种 CrapFactory 我可以通过 SQLAlchemy 以便正确填充其所有实例?
我的方法完全错误吗?
如果我只是坚持使用 URL 路由,我觉得我不会遇到这些问题......
【问题讨论】:
标签: python sqlalchemy url-routing pyramid