8

Django のドキュメントによるとsettings.configureDJANGO_SETTINGS_MODULE. 私のウェブサイトのプロジェクトでこれを行いたいと思います。settings.configure設定が適切なタイミングで構成されるようにするには、どのファイルに呼び出しを入れる必要がありますか?

Daniel Roseman のコメントに応じて編集します。

これを行う理由はsettings.configure、設定変数を kwargs dict として渡すことができるようにするためです{'INSTALLED_APPS': ..., 'TEMPLATE_DIRS': ..., ...}。これにより、アプリのユーザーは自分の設定を dict で指定し、その dict をアプリの関数に渡し、アプリを機能させるために必要な特定の設定を追加することができますINSTALLED_APPS

私が思い描くのはこんな感じです。私のアプリを「rexe_app」と呼びましょう。wsgi.py では、アプリのユーザーは次のようにします。

import rexe_app
my_settings = {'INSTALLED_APPS': ('a','b'), ...}
updated_settings = rexe_app.augment_settings(my_settings)
# now updated_settings is {'INSTALLED_APPS': ('a','b','c'), 'SESSION_SAVE_EVERY_REQUEST': True, ...}
settings.configure(**updated_settings)
4

3 に答える 3

5

DJANGO_SETTINGS_MODULE設定は にあるデフォルトを更新しますが、django.conf.settings.global_settingsのパラメータはそれらを完全に無視するため、まったく同等ではありません。そのconfigureため、追加の処理を追加する必要があります。

INSTALLED_APPSまず、設定処理で一度調べられるため、その場で変更できないことに注意してください。たとえば、Apache でデプロイされたアプリケーションの INSTALLED_APPS に変更を適用するには、Apache を再起動する必要があります。

第 2 に、設定がインポートされるため、このポイントは何らかのインジェクションが発生しやすく、ユーザーに公開される可能性が非常に高くなります。

これがメタ アプリの場合、次の 2 つの可能性があります。

  1. `django` に関する設定のデフォルト設定を提供する場合は、アプリの `default_settings.py` に以下を追加します。
    INSTALLED_APPS = ('default_app', )
    
    アプリに `default_settings.py` をインポートしないようにして、ユーザーに settings.py に追加するようにしてください。
    from rexe_app.default_settings import *
    INSTALLED_APPS += ('users_app', )
    
    これにより、エンド ユーザーに対して効果的に `INSTALLED_APPS` が `('default_app', 'users_app', )` に設定されます。
  2. `rexe_app` に関する設定が必要な場合は、アプリの `__init__.py` でデフォルト設定できます。
    django.confのインポート設定から
    REXE_APP_CONFIG_PARAM = getattr(設定, 'REXE_APP_CONFIG_PARAM',
        'default_param_value')
    
    したがって、ユーザーがデフォルトの「REXE_APP_CONFIG_PARAM」を変更する必要がある場合は、追加するだけです
    INSTALLED_APPS = ('rexe_app')
    REXE_APP_CONFIG_PARAM = 'user_param_value'
    
    彼の `settings.py` に。
于 2013-11-08T09:25:29.527 に答える
3

それは wsgi スクリプトにあります。ドキュメントをご覧ください。

mysite.settings.configure()代わりに実行できますos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

于 2013-11-08T09:15:33.920 に答える
0

wsgi を使用している場合は、アプリを実行する前に wsgi スクリプトでそれを呼び出します。

開発サーバーでこれを行う場合は、コマンド ライン オプションとして渡します (同じページに記載されています)。

django-admin.py runserver --settings=mysite.settings
于 2013-11-08T09:11:41.983 に答える