2012-07-23 5 views
7

djangoドキュメントは明確に状態実行時にdjangoの設定を変更しないでください。

実行時にアプリケーションの設定を変更しないでください。

ここで、なぜこれがそうである、link to that statement

私の質問があるの?私は、実行時にアプリケーションを動的に追加し、実行時にデータベースを追加したいと考えています。どちらも設定の編集が必要です。誰かが設定が実行時に編集されない理由と、例外が存在する場合、どの設定であるのか、なぜ例外的なのか説明できますか?私は自分の目標を達成する方法にそれほど関心がありませんが、なぜ設定を変更してはいけないのかという理由からです。

+0

私はhttps://docs.djangoproject.com/en/dev/ref/settings/を見ました。これらは、アプリケーションの起動時に適用されるすべての設定です。*結果的に、実行時にそれらを変更することは非常に意味があります。 –

答えて

5

ほとんどの設定は、実行時に変更すると再読み込みされません。だから、Djangoはあなたが行った変更を認識しません。

これは、Djangoが通常のPythonコードにすぎないためです。コードを監視しているサーバーのようなものではありません。コードの一部に過ぎません。

メールが送信されるたびに「settings.DEFAULT_FROM_EMAIL」が実行される可能性があるため、Djangoコードの一部が設定の変更に応答することがあります。

しかし、DjangoがINSTALLED_APPSのために行う必要があるように、設定を何らかの方法で処理すると、何かを変更して処理をやり直すことに気づくことはありません。

どの設定が安全ですか?さて、ドキュメントは将来的に変更される可能性があるため、「安全なものはありません」と言っています。 Djangoは何らかの理由で設定のコピーを保存したり、何らかの処理を行うことがあります。

INSTALLED_APPSを変更すると、インポートするモジュールが変更されるため、変更することはできません。 DjangoはPythonがこのレベルで動作する方法を回避することはできません。モジュールを 'unimport'できる必要があります。これは基本的に不可能です(唯一の方法はプロセスを再起動することです)。クロスアプリリンクに関連する問題

1

AFAIK実行時にどの設定が安全に変更可能であるかのドキュメントはありませんが、より明確に文書化されることを尋ねるopen ticketがあります。

+0

自分の設定変数はどうですか?例えば設定で空の辞書を作成し、システムが稼働している期間にデータを追加します(この場合は、システム再起動時にデータが失われた場合は無関係です)。 – Derek

1

設定オブジェクトでlook under the hoodを使用すると、Djangoはプロジェクトの設定モジュールとのインターフェースを提供しますが、実行時に動的に設定を変更することはできません。

しかし、フレームワークのアーキテクチャは、アプリケーションが初期化中に1回だけ構成されているという前提に基づいて、メモリー最適化のためにスレッド間で大量のグローバル状態が共有されるリクエスト - レスポンス・フロー。

関連する問題