2011-10-28 4 views
2

ビュー・コードにアプリケーション・ロジックを記述する必要がありますか?たとえば、フォーム要素の提出時に、ユーザーを作成し、アクティベーション電子メールを送信する必要があります。これはビュー機能から行うことですか、別の機能を作成して道路をテストしやすくする必要がありますか? Djangoはここで何をお勧めしますか?ビュー・コード内のアプリケーション・ロジック

答えて

6

私はdjangoを使い始めたときにすべてがどこに行くのか把握することが非常に難しいと感じました。それは本当にあなたが書いているロジックのタイプに依存します。

モデルから始めて、モデルメソッドとマネージャーは、行レベルのロジックとテーブルレベルのロジックを実行するのに適しています。すなわち、モデルマネージャは、関連するカテゴリのリストを取得するコードを書くのに適していますすべてのblogpostsと。モデルメソッドは、特定のブログポスト内の文字を数えるのに適しています。

ビューレベルのロジックでは、リクエストを受け取り、必要な結果を得るために必要な手順を実行し(おそらくモデルマネージャを使用して)、テンプレート用に準備を整えます。

他の場所には収まらないが、論理構造を持つコードがあれば、それを実行するモジュールを書くことができます。同様に、あなたが属していないと思われるコードのスクラップがある場合は、utils.pyを保持してください。

本当にテンプレート内でロジックを実行しないでください。テンプレートタグを使用する必要がある場合は、テンプレートタグを使用してください。これらは、すべてのリクエストサイクルや1つのリクエストサイクルで必要としない再利用可能なコードを使用するのに適しています(サブセットに入れたい場合があります)。

リクエスト・サイクルごとにいくつかのロジックを実行する場合は、コンテキスト・プロセッサまたはミドルウェアを使用します。 1つの要求サイクルでのみロジックを実行したい場合は、おそらくその場所が表示されます。

TLDR:あなたのビューにロジックを書くことは結構ですが、

2

登録コードを独自の関数に分けてテストを簡単にするのは良い理由です。管理者に別のプライベートビューでユーザーを登録させると、登録機能はよりDRYになります。個人的には、コード内の小さなアプリケーションロジックが多大な損害を及ぼすとは思わない。

django-registrationアプリで登録ビューを見てみるのは有益なことかもしれませんが、それが書かれているかどうかは分かりません。ユーザー登録を独自の関数にカプセル化しています(登録バックエンドがプラグイン可能なので、間接レベルもあります)。

+1

1より適切であるかもしれない場所がたくさんがあります。私はレスポンスを書いていて、それが基本的にはあなたが言っていることを実感しました。この投稿は最も理にかなっています。単純にDRYです。これが唯一のアクションである場合は、それをビューに保持してください!そうでない場合は、別の場所に配置してビューにインポートします。シンプル。 –

関連する問題