7

(これは、 「複数のサイトの要求に基づいて Django 設定変数を動的に変更する」の複製ではありません。前の質問では、実行時にはるかに深刻な再構成を行うことがカバーされているためです)

プロジェクトのドメイン/ホストにコンテンツを結び付けるために使用sites.Siteします(外部キーを介して)。適切なSiteベースの選択request.META['HTTP_HOST']は、カスタム ミドルウェアで行われます。

ただし、そのようなsitesフレームワークの使用は正確には正規の方法ではないことを認識しています(異なるドメインに異なるデータを提供するアプリケーションのインスタンスが1つsitesありますが、 AFAIKは、ドメインごとに1つずつ、複数のインスタンスで動作するように設計されています)。

最も気になる要素は、アプリケーションの現在のインスタンスを1つ(ドメイン)settings.SITE_IDに結び付ける静的設定です。Siteこれはいくつかの場所で使用さcontrib.authれます (パスワード リセット メールで完全な絶対 URL を作成するため)。したがって、にSITE_ID基づいて動的に変更するのはクールですrequest.META['HTTP_HOST']

だから私の質問は:

SITE_ID を動的に (つまり、ミドルウェアで) 変更することは良い考えですか?

ドキュメントには、実行時に設定を変更することは一般的に悪い考えであると記載されていますが ( here )、おそらくこの場合 (十分に早い段階で呼び出されるミドルウェアで) 行うことは問題ありません。

(編集):

ローカルでは期待どおりに動作します (Django テスト クライアント) が、複数のスレッドやプロセスを持つ運用環境での同時要求を検討しています。

4

1 に答える 1

3

オフにしてみませんdjango.contrib.sitesか?それをから削除すればINSTALLED_APPS、大丈夫です。

具体的には、適切に作成されたアプリは、get_current_siteからの関数を使用する必要がありますdjango.contrib.sites.modelsRequestSiteサイトアプリがインストールされていない場合、この関数は、標準のサイトインスタンスと同様に機能するオブジェクト(モデルではない)のインスタンスを返すだけです。

ただし、元の質問に答えるために、設定を動的に編集することは決して良い考えではありません。

于 2011-05-27T01:07:49.707 に答える