1

我开始使用 Pyramid,并且对将遍历作为路由策略感到兴奋。它看起来自然而有力。然而,我的想法使我走上了一条可疑的道路。你能推荐一个更好的模式吗?

我正在尝试实现一些 RESTful 路由。例如,我想映射以下内容:

  • 获取 /users ->索引
  • 获取 /users/chris ->显示
  • 获取 /users/new ->
  • 发布 /users ->创建
  • PUT /users/chris ->更新
  • 删除 /users/chris ->销毁

看起来showupdate动作的最终上下文应该是适当的 User 实例,但是indexcreate呢?看起来 User 类本身就是一个合适的上下文,但是遍历机制,__ getitem __方法,不能在没有一些元类魔法的类上实现。似乎有一种更清洁的方法可以做到这一点。显然我可以创建一个 UserResourceContainer ,它唯一的工作就是处理遍历,但我被使用 User 类的优雅所吸引。想法?

4

1 回答 1

1

不要忘记映射到的视图需要上下文/users。有一个单一的User类会很困难,当然也不优雅。

我的猜测是,单独UserContainer的解决方案将是您可以找到的更简单的解决方案。根据您的数据库后端,您甚至可以以通用方式进行操作。例如,使用 SqlAlchemy:

class Container:
    def __getitem__(self, item):
        try:
            id = int(item)
            return DBSession.query(self.cls).filter_by(id=id).one()
        except (NoResultFound, ValueError):
            raise KeyError(item)

然后,您UserContainer的只是:

class UserContainer(Container):
    cls = User

优雅,不是吗?

于 2013-10-18T09:03:57.557 回答