2010-12-28 12 views
1

私は、サイト全体のさまざまな場所で使用される重要な値がいくつかあるWebサイトで作業しています。たとえば、登録の開始日や終了日など、特定の重要な日付。Djangoに重要な特異値を格納する

これを行う方法の1つは、これらの値を格納するモデルを作成することですが、それは過剰なもののように聞こえます(私は1つのインスタンスしか持たないからです)。もう1つの方法は、これらの値をsettings.pyファイルに保存することですが、変更したい場合は、有効にするにはウェブサーバーを再起動する必要があるようです。この種のものを扱うためにDjangoのベストプラクティスが何になるのだろうかと思っていました。

答えて

1

settings.pyに保存することができます。これには何も問題はありませんが(多くのカスタム設定が必要な場合は、設定を複数の異なるファイルに編成することもできます)、実行時に変更することはできません。

私が働いているdjango-constanceという単純なアプリ(githubからhttps://github.com/comoga/django-constanceで入手できる)と同じ問題が解決しました。これによりsettings.pyに設定を保存することができますが、実行時に設定可能な設定に変更する必要がある場合は、django admin frontendを使用してRedisデータストアに切り替えることができます。設定値をデフォルト値として使用することもできます。このアプリを試してみることをお勧めします。

あなたはこのようなあなたの動的な設定を初期化するドキュメントから貼り付けて、あなたのコードの変更は、かなり最小限です:

CONSTANCE_CONFIG = { 
    'MY_SETTINGS_KEY': (42, 'the answer to everything'), 
} 

そして代わりのDjangoのconfから設定をインポートするの、あなたがこれを行う:

from constance import config 

if config.MY_SETTINGS_KEY == 42: 
    answer_the_question() 
0

すべてのテンプレートで特定の変数セットを使用できるようにするには、コンテキストプロセッサが必要です。

http://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

より多くのリンク

http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/ http://blog.madpython.com/2010/04/07/django-context-processors-best-practice/

あなたのコンテキストプロセッサ用のコード、プロジェクト内の任意の場所に住むことができます。あなただけの下であなたのsettings.pyにそれを追加する必要があります。

TEMPLATE_CONTEXT_PROCESSORS = 

あなたのsettings.pyに、あるいはconstants.pyの下で、ちょうど

from constants import * 

しかし、あなたの定数を定義保つことができますあなたが言及したように、設定が更新されるたびにサーバーをリロードする必要があります。これらの設定をどのくらい頻繁に変更するかをまず判断する必要があると思いますか?自動的に設定を再読み込みできるようにするために余計な努力をする価値はありますか?あなたが自動的に設定を有効にしたい場合は

、彼らはあなたが次の操作を行う可能性が更新されるたび:DB /変更を保存する際

    1. ストアの設定を、ファイルに出力を書き込み
    2. settings.py/constantspyがファイル
    3. リロードサーバ

    さらには、あなたがDjangoの管理インタフェースから設定を更新することを可能にし、同様にリロードされますmezzanine projectを見て読み込みます。

    参照してください:http://mezzanine.jupo.org/docs/configuration.html

    が必要な変数が頻繁に更新された場合、私はちょうどsettings.pyに保存し、カスタムコンテキストプロセッサを追加提案します。

    GITなどのソースコントロールを使用している場合は、更新は非常に簡単です。ファイルを更新してサーバーにプッシュするだけです。サーバーを本当に簡単にリロードするには、新しいコードがプッシュされたときに自動的にサーバーをリロードするgit用にpost-recieve hookを作成することもできます。

    設定を公平に定期的に更新する場合は、他のオプションを示唆しています。

  • 関連する問題