django-pkgconf

素朴な
リックとモーティ©。 私もバッテリーをプレゼントします。


少し前に、私は「コントロールパネル」django-projectsを作成するための小さなアプリケーションを公​​開しました。 開発の過程で、モジュールのデフォルト設定を保存するという些細な状況に遭遇しました。 githubをすばやく検索すると、各開発者が独自の実装を使用していることが明らかになりました。 既製のソリューションもありますが、このような単純な質問ではそれらは冗長に思えたので、賢明に行動し、自分の自転車を撮影しました。


このバッテリーはOSPユーザーだけに役立つように思えるかもしれませんが、問題はこの同じ考えを日常生活で使用できることです。


「平凡な状況」


そこで何かをするアプリケーションを書いたとしましょう。 同時に、プロジェクトのsettings.py値を設定することもできます。この値は、すぐに使用できる値に書き換えられます。 全体として、タスク全体は次の2つになります。デフォルト値を保存し、コンシューマ開発者が設定ファイルでそれらを書き換えることです。


そのように:


 #    app/my_settings.py FOO = True #    settings.py FOO = False #  ,  from django.conf import settings settings.FOO False 

私たちはプロジェクトで使用します


現在では、プロジェクトをモジュール化して「アプリケーション」に分割するプロジェクトを開発するのが一般的です。 モデル、ビュー、URLなど、設定を除くほとんどすべてが個々のアプリファイルに含まれています。 たとえば、ニュースレターサービスへのアダプタと、いくつかのnewsletters/adapter.py次のコードを記述します。


 adapter = Adapter(username='user', password='pass') 

ハードコードのログインとパスワードはバカだと言って、定数に入れる必要があると言うなら、あなたは正しいでしょう:


 USERNAME = 'user' PASSWORD = 'password' adapter = Adapter(username=USERNAME, password=PASSWORD) 

近いようですが、それでもそうではありません。 別のアプローチ:


 # settings.py NEWSLETTERS_USERNAME = 'user' NEWSLETTERS_PASSWORD = 'password' # newsletters/adapter.py from django.conf import settings adapter = Adapter(username=settings.NEWSLETTERS_USERNAME, password=settings.NEWSLETTERS_PASSWORD) 

真実のように聞こえます。 ただし、いくつかの欠点があります。



django-pkgconf


これを試してみましょう:


 # newsletters/conf.py from pkgconf import Conf class NewsLetters(Conf): USERNAME = 'username' PASSWORD = 'password' # newsletters/adapter.py from . import conf adapter = Adapter(username=conf.USERNAME, password=conf.PASSWORD) 

条件が満たされます:プレフィックスなし、 プロジェクト設定ファイルの乱雑なし。
開発設定の値を再定義します*:


 # local_settings.py NEWSLETTERS_USERNAME = 'test_user' 

できた これにより、 newslettersアプリケーション構成のUSERNAME値が上書きされ、 PASSWORD値は変更しなかったため同じままです。 その結果、すべての種類のDATABASESTEMPLATESなどがあり、 プロジェクトに関連するもののみが存在する、整然とした整然としたsettings.pyを取得しsettings.py


互換性


テストはpython 2.7.9、3.4.3、3.5.0およびdjango 1.8、1.9で実施されました。


 Name Stmts Miss Cover ----------------------------------------- pkgconf/__init__.py 22 0 100% 

githubのプロジェクト。


* django-configurationsを使用して、これを行わないでください。



Source: https://habr.com/ru/post/J283378/


All Articles