7

djangoでプロジェクトを構築してみたかっただけです。したがって、そのようなプロジェクトをどのように管理するかについての(基本的な)質問があります。プロジェクトをアプリケーションに分割する方法などのガイドラインなどが見つからないため。

例として一種のSOを取り上げましょう。どのアプリケーションを使用しますか?アプリケーション「ユーザー」と「質問」があるべきだと思います。しかし、静的な記事を含むトピックシステムもあったとしたらどうでしょう。多分彼らはまた票を受け取ることができた。では、アプリの構造を構築するにはどうすればよいですか?「質問」、「投票」、「トピック」用の1つのアプリですか、それとも1つのアプリ「コンテンツ」ですか。

どうしたらいいのかわからない。まだDjangoについてあまり知らないからかもしれませんが、興味もあります...

4

5 に答える 5

6

厳格なルールはありませんが、より専門的なアプリケーションの側で誤りを犯した方がよいと思います。理想的には、アプリケーションは 1 つの機能上の問題のみを処理する必要があります。つまり、「タグ付け」、「コメント」、「認証/認証」、または「投稿」です。このタイプの設計は、車輪を再発明するのではなく、利用可能なオープン ソース アプリケーションを再利用するのにも役立ちます (つまり、Django には認証アプリとコメントアプリが付属しており、django-taggingまたはdjango-taggableはほぼ確実に必要なことを実行できます)。

汎用外部キーは、モデルに適用される可能性のあるタグ付けやコメントなどのアプリケーションを他のいくつかのアプリケーションから分離するのに役立ちます。

于 2008-12-21T14:08:05.897 に答える
5

できるだけ多くのアプリケーションでプロジェクトを分けてみてください。ほとんどのプロジェクトでは、アプリケーションに含まれるモデルが 5 つを超えることはありません。たとえば、SO のようなプロジェクトでは、UsersProfiles、Questions、Tags (このために django に用意されているものがあります) などに個別のアプリケーションがあります。静的ページを持つシステムがあった場合、それも別のアプリケーションになります (準備ができているものがあります)。この目的のために)。また、他のプロジェクトで再利用できるように、アプリケーションをできるだけ汎用的にするようにしてください。再利用可能なアプリに関する優れたプレゼンテーションがあります。

于 2008-12-21T12:56:59.613 に答える
3

アプリを作成するかどうかを決める際に自問するのは、「これを別のプロジェクトで使用できますか?」という質問です。可能だと思う場合は、アプリケーションを可能な限り独立させるために何が必要かを検討してください。アプリが特定のプロジェクトに固有のものに依存しないように、依存関係をどのように減らすことができますか。

これを行う方法のいくつかは次のとおりです。

  • 各アプリに独自のurls.pyを与える
  • ビューで使用されるモデルを明示的に宣言するのではなく、モデルタイプをパラメーターとして渡すことができます。一般的なビューはこの原則を使用します。
  • ある種のtemplate_nameパラメーターをurls.pyに渡して、テンプレートを簡単にオーバーライドできるようにします。
  • オブジェクトとビューで逆URLルックアップを実行できることを確認してください。これは、urls.pyでビューに名前を付け、モデルにget_absolute_urlメソッドを作成することを意味します。
  • タグ付けなどの場合、GenericForeignKeysを使用して、ForeignKeysが「振り返る」かどうかに関係なく、アプリ内のモデルを他のモデルに関連付けることができます。
于 2008-12-23T02:34:09.417 に答える
3

他の一連の依存関係と同様に、プロジェクトの最も有用なスタンドアロンの側面を見つけて、それらのスタンドアロン アプリを作成してみてください。他の Django アプリにはより高いレベルの機能があり、セットアップした最も低いレベルのアプリの一部を再利用します。

私のプロジェクトには、モデルに独自の Event オブジェクトを持つカレンダー アプリがあります。また、カープール データベースをセットアップし、出発時間と所要時間については、RideShare テーブルでカレンダーの Event オブジェクトを使用します。カープーリング データベースはカレンダーに対応しており、カレンダー アプリからすべての素敵な .ics エクスポートとカレンダー ビューを「無料」で取得します。

テンプレート ディレクトリに project/app2/templates/app2/index.html という名前を付けるなど、アプリを再利用可能にするためのいくつかのトリックがあります。これにより、他のアプリから app2/index.html を参照して、適切なテンプレートを取得できます。私は、Django 自体に組み込まれている再利用可能なアプリを見て、それを選びました。Pinax は、サイズ的には少しモンスターですが、再利用可能な優れたアプリ構造を示しています。

疑問がある場合は、今のところ再利用可能なアプリのことは忘れてください。すべてのメッセージと投票を 1 つのアプリに入れて、1 回のリビジョンを完了します。プロセス中に、どのステップが不要であるかを発見し、将来的に独立したものとして分割される可能性があります.

于 2008-12-21T14:03:39.290 に答える
0

私がそのような質問にどのようにアプローチしているかを説明します: 私は通常、一枚の紙を持って座って、ボックス (機能) と矢印 (機能間の相互依存性) を描きます。あなたを助けることができる方法論やその他のものがあると確信していますが、私のアプローチは通常私にとってうまくいきます(もちろんYMMV)。

ただし、サイトがどうあるべきかを知ることは基本です。;)

于 2008-12-21T12:07:27.107 に答える