ユーザーが快適に変更でき、Djangoを再起動する必要がないように、いくつかの(アプリ固有の)設定を管理インターフェイスに公開したいと思います。
これについてどうすればいいですか?
http://djangopackages.com/grids/g/live-setting/ でアプリケーションをチェックアウトしました(ただし、Django-constanceが最も魅力的でした)データベース内で、それらを変更するためのWebインターフェースを提供し、キャッシュします。最初の2つの機能はすでにDjangoに組み込まれていませんか?
私が見る最大の欠点は、これらの設定の古い場所(settings.py)のドロップイン置換アプリではなく、表記に移行する必要があり、多くの場合、テンプレートでアクセスするために別のコンテキストプロセッサを追加することです。
私はこれをやってもらえませんか?
私の現在の素朴な観点から見ると、唯一の欠点は次のとおりです。
これは両方の世界の最高のものではありません-ランタイム管理者(すべての特典)、データベースバックエンド、キャッシュ、および私の設定はありません。USED_TO_BE_IN_SETTINGS_DOT_PYは変更が必要です。何か不足していますか?
知る限り、Django設定は不変であると想定されています。これには複数の理由があります。最も明らかなのは、Djangoはサーバーの実行モデルを認識しない(プリフォーク/マルチスレッド)。
また、ORMで何かを使用する前に設定を読み込む必要があるため、設定自体をDjangoモデルから読み込むことはできません。
したがって、基本的に、2つのソリューションがあります。
最初は信じられないほどのハックであり、私はそれを提案しません。 2番目の方法は、より直接的で簡潔ですが、通常の習慣を変更する必要があります(from Django.conf import settings
)。
2番目のアプローチは、おそらくリンク先のサードパーティアプリによって実装されるものです。
From Django 1.8 docs:
DATABASES
は辞書です。したがって、辞書の操作方法は次のとおりです。
import Django.conf as conf
conf.settings.DATABASES['default']['NAME'] = 'novo_banco'
settings
モジュールの推奨.configure()
メソッドを使用できます。
from Django.conf import settings
settings.configure(DEBUG=True)
settings
モジュールには追加の便利な機能があります。 docs を確認してください。
正直なところ、彼のコードを分析すると、Djangoになります。バージョン1.4.5では、次のモジュールに従って):
myproject\manage.py
Django\core\management__init __。py ##メソッド-execute_manager
Django\conf__init __。py ##クラス-LazySettings; attr-_wrapped
Django\utils\functional.py ##クラスLazyObject;重要なメソッド-new_method_proxy
機能的なオプションですが、リスクがあります。 python "_"では、属性が保護されていると見なされます。
from Django.conf import settings
settings._wrapped.INSTALLED_APPS = () ## *really work*
次のプロジェクト: https://github.com/alexsilva/DJPlugins 実行時にこの変数が変更されていることがわかります。プロジェクトのアイデアはすでに機能しています。
ご覧ください: https://bitbucket.org/bkroeze/Django-livesettings * Django-LivesettingsはSatchmo Project
_。 「settings.py」を編集するのではなく、管理インターフェイスを介して設定を構成する機能を提供します。*
たぶんそれはあなたに役立つかもしれません。