2

要件: Django アプリケーションの 1 つのインスタンスが複数のクライアントにサービスを提供できるようにしますクライアントとは、互いのデータにアクセスすることが想定されていない異なるドメインまたは異なるアカウントを意味します。

クライアントの推定数は、約数百です。

たくさんあると思いますが、長期的には労力を最小限に抑えるものを探しています。それらのうちの2つは次のとおりです。

  1. 1 つは、Djangoのサイト フレームワークsite_idと 1 つのデータベースを使用し、ほとんどのモデルに を追加することです (恐ろしく聞こえます) 。
  2. 認証モジュールとサイト モジュールに 1 つのデータベースを使用し、複数データベース機能を使用してクライアント固有のモデル データを別のデータベースに保持します。新しいクライアントのために動的なデータベース作成を実装する必要があり、さらに悪いことに、アプリケーションをアップグレードするときにデータベースの移行を処理する方法がわからないため、これも私を怖がらせます。

これにはどのようなアプローチが推奨されますか?

4

1 に答える 1

0

サイトごとに異なる SITE_ID を持つ同じアプリケーションの複数のインスタンスを持つことができる場合は、それが推奨されるオプションになります。そうすれば、サイトごとに異なるデータベースを使用するか、Django サイト フレームワークを確実に使用することができます。

単一のプロセスまたは少数のプロセスで何百ものサイトにサービスを提供したい場合は可能ですが、それは Django の現在の設計を曲げています。使用Site.objects.get_current()は SITE_ID に依存するため、現在のサイトを把握するには別のものを使用する必要があります。

必要な機能を提供するパッケージの 1 つがdjango-threaded-multihostget_current_hostで、リクエストごとに使用して別のサイトを取得できます。

唯一の欠点は、使用するすべての Django アプリをそのSite.objects.get_current()ような設定で変更する必要があることです。これにより、特定のプラグ可能なアプリケーションを使用するのが難しくなり、使いにくいものになります。モンキー パッチを適用するか、自分で作成したアプリを使い続ける必要があります。 threaded-multihost の使用を念頭に置いてください。

それは可能ですが、現時点では Django ではそれほど優れていません。

于 2011-03-19T14:37:43.967 に答える