0

プロジェクトを Django フレームワークでビルドする予定です。しかし、すべての Django パッケージに models.py ファイルがあることに気付きました。ここで、プロジェクト内の複数のアプリ間で共有する一連の汎用関数があり、これらの関数の定義を別のパッケージ (またはアプリ?) に入れることを計画しているとします。では、「一般的な」アプリを作成し、これらの関数をコピーして models.py ファイルに貼り付ける必要がありますか? または、「一般的な」アプリ ディレクトリに general.py ファイルを作成し、models.py を空のままにすることはできますか? それを行う「Django」の方法は何ですか?

ありがとう。

4

3 に答える 3

1

models.pyファイルは、データベースの構造を定義するために使用されます。したがって、データベース エントリを定義するためにそのままにしておく必要があります。という名前のアプリを作成してそのアプリにgenerals入れるgeneral.pyことができ、そこから任意のアプリで呼び出して使用できます。

于 2013-04-06T06:17:55.563 に答える
1

これらの関数の定義を別のパッケージ (またはアプリでしょうか?) に入れる予定です。

これをアプリにすることを決定する前に (そしてアプリにすることを決定する場合)、再利用可能なアプリの開発に関するジェームズ・ベネットの基調講演と、アプリケーションのレイアウトに関する過去の投稿を参照することをお勧めします。彼のスライドの 1 つから:

これは独自のアプリケーションである必要がありますか?

  • それは私がやっていることと直交していますか?
  • 他のサイトでも同様の機能が必要ですか?
  • はい?次に、別のアプリケーションに分割する必要があります。

1 つの汎用アプリに機能を詰め込みすぎている場合は、汎用アプリを複数の再利用可能なアプリに分割することをお勧めします。

元の質問に戻ると、Django はmodels.pyすべてのアプリでファイルを期待しています。したがって、ファイルが空であってもファイルが必要です。

内にmodels.pyは、アプリケーションのモデル クラスのみを含める必要があります。models.pyしたがって、再利用したいさまざまなコードを内部に入れると、ベスト プラクティスに従っていることにはなりません。

前に述べたアプリケーションのレイアウトの投稿から:

アプリケーション レベルでは、アプリケーションが何を使用するかに応じて、通常、さらにいくつかのファイルをドロップします。

  • アプリケーションでカスタム マニピュレータを定義する場合は、それらをビュー ファイルではなく、forms.py というファイルに配置します。
  • アプリにカスタム マネージャーが複数ある場合は、models ファイルではなく、managers.py というファイルに配置します。
  • カスタム コンテキスト プロセッサを定義する場合は、context_processors.py というファイルに配置します。
  • カスタム ディスパッチャ シグナルを設定する場合、それらは signal.py というファイルに格納されます。
  • アプリケーションがシンジケーション フィードを設定している場合、フィード クラスは feeds.py というファイルに格納されます。同様に、サイトマップ クラスは sitemaps.py に入ります。
  • ミドルウェア クラスは、middleware.py というファイルに格納されます。
  • 明らかに他の場所に移動しない雑多なコードは、utils というファイルまたはモジュールに移動します。

これらすべてが、元の質問に直接答えているわけではありません。

「一般的な」アプリ ディレクトリに general.py ファイルを作成し、models.py を空のままにすることはできますか?

ただし、これにより、プロジェクトと要件により適した決定を下すための追加情報が得られることを願っています.

于 2013-04-06T08:49:29.460 に答える
1

私は通常、プロジェクトの開始時に django-admin.py から作成されるメイン アプリの下に utils.py ファイルを作成します。

于 2013-04-06T06:23:18.667 に答える