1

多くの一般的なモデルを使用する 2 つの Django プロジェクトがあります。カスタム ユーザー クラス、アルゴリズム クラス、製品クラス。2 つのプロジェクトは e コマースに関連しており、どちらも異なるマシンで実行され、まったく異なる目的を果たします。

ただし、これらのモデルが「共通」にあることを考えると、ベース モデルとの「ベース」として機能する 3 つ目の共通プロジェクトを作成し、これらのプロジェクトの両方がインポートする価値があるかどうか疑問に思いました。この基本プロジェクトの共通モデル。

両方の e コマース Web サイトの 2 つの異なる顧客データベースと製品データベースをこの大きな共通データベースに結合できるため、これも役立ちます。

私の質問は次のとおりです。1) 考えられるオーバーヘッドの経験がある人、または現実的に見積もることができる人はいますか? 将来的には、両方の Django プロジェクトの共通部分を結合する必要がありますが、3 番目のプロジェクトを (おそらくリアルタイムで) インポートするには、多くのオーバーヘッドが生じると予想されます。

2) この 3 番目のプロジェクトをインポートするには、どのような方法が最適ですか? 私は複数の方法を考えることができます:

  • インターネット上の既存のもの (setuptools、lxml、tasticpie) などのパッケージ化されたインストール可能な Python モジュールを作成し、そのモジュールを両方の Django プロジェクトにインポートします。
  • プロジェクトをマシンのディレクトリに配置し、そのパスからリアルタイムで Python ファイル内にインポートします (以前に実行したことがありますが、機能しますが、オーバーヘッドがあるようです)。

編集: 私たちの共通のモデル/機能には、さらに、企業秘密の特許取得可能なコンテンツが含まれているため、公開配布は問題外です。ルートは、パッケージのようなものを作成することですが、一般には配布されず、2つの特定のマシンにのみ配布およびインストールされると推測しています。

誰でもこれについてフィードバックをいただけますか?

ありがとうございました

4

3 に答える 3

1

一般的なモデルなどを独自のpythonパッケージに分離します。次に、各プロジェクトにこのパッケージをインストールするか、システムレベルでパッケージをインストールするだけで、両方がそれを使用できます。これを適切に処理すれば、インポートの多くを変更する必要はなく、新しいeggをサーバーにプッシュし、easy_installまたはを介してインストールすることで、パッケージを簡単に更新できますpip

これは、現在プロジェクトを設定している方法です。一般的な非ビジネスロジックは独自のプロジェクトに分離されており、これからパッケージを作成してから、他のPythonライブラリと同じようにインストールして使用します。

ここで少し余分な作業を行うと、時間を大幅に節約でき、さまざまなプロジェクト間で共通のコードを透過的に更新することもできます。

于 2012-10-04T13:53:08.323 に答える
0

近い将来、これらのアプリケーションを並行してサポートする予定がある場合、これは絶対に価値があります。あるものに変更を加えてから、別の場所でそれをほぼそのまま繰り返すことほど気のめいることはありません。特に、2 つが微妙に異なるため、奇妙なプロジェクト固有のバグが発生し始めた場合はなおさらです。

あなたがリストしていない共有を実現する1つの方法は、git submodulesまたは felixge のGit Fake Submodulesです。

于 2012-10-04T13:56:09.240 に答える
0

単一のプロジェクト内でモデルを論理的なアプリに編成します。

たとえば、4 つのアプリを含む 1 つのプロジェクト:

myproject/
    blog/
    contact/
    project1specific/
    project2specific/

サイト フレームワークを使用します: https://docs.djangoproject.com/en/dev/ref/contrib/sites/

2 つの settings.py ファイルがある (settings_p1.py、settings_p2.py)

各設定ファイルで、SITE_ID をプロジェクトごとに異なる値に設定します。

SITE_ID = 1 (or 2 for the second project)

サイト テーブルに 2 番目のサイト レコードを実際に作成することを忘れないでください。

各 settings.py 内の INSTALLED_APPS には、この特定のプロジェクトに使用するアプリのみを含めます。

たぶん、2 つの異なるテンプレート ディレクトリ、STATIC_ROOT (MEDIA_ROOT はおそらく同じままです) と urls ファイルを 2 つのプロジェクトの設定ファイルに設定します。

この時点で、プロジェクト settings.py ごとに異なる DB 設定を使用するか、サイト FK をモデルに追加して、AdminForms クエリセットに現在のサイト レコードのみを反映させることができます。

詳細が必要な場合はお知らせください。ただし、これがあなたがやっていることを達成する方法です。

于 2012-10-04T13:55:16.403 に答える