1

私は Pyramid を使い始めており、ルーティング戦略としてのトラバーサルに興奮しています。ナチュラルで力強い印象です。しかし、私の考えは私を疑わしい道に導きました。より良いパターンを提案できますか?

いくつかの RESTful ルートを実装しようとしています。たとえば、次のようにマッピングしたいと思います。

  • GET /ユーザー ->インデックス
  • GET /users/chris ->表示
  • GET /users/new ->新規
  • POST /users ->作成
  • PUT /users/chris ->更新
  • 削除 /users/chris ->破棄

showおよびupdateアクションの最終的なコンテキストはUser の適切なインスタンスであるべきだと思われますが、indexおよびcreate はどうでしょうか? 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 に答える