Djangoの設定
Django設定ファイルには、Djangoインストールのすべての構成が含まれています。 このドキュメントでは、設定の仕組みと使用可能な設定について説明します。
基礎
設定ファイルは、モジュールレベルの変数を持つ単なるPythonモジュールです。
設定例をいくつか示します。
ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = '[email protected]'
設定ファイルはPythonモジュールであるため、以下が適用されます。
Python構文エラーは許可されません。
通常のPython構文を使用して動的に設定を割り当てることができます。 例えば:
MY_SETTING = [str(i) for i in range(30)]
他の設定ファイルから値をインポートできます。
設定の指定
- DJANGO_SETTINGS_MODULE
Djangoを使用するときは、使用している設定を伝える必要があります。 これを行うには、環境変数 DJANGO_SETTINGS_MODULE を使用します。
DJANGO_SETTINGS_MODULE の値は、Pythonパス構文である必要があります。 mysite.settings
。 設定モジュールはPython インポート検索パス上にある必要があることに注意してください。
django-adminユーティリティ
django-admin を使用する場合は、環境変数を1回設定するか、ユーティリティを実行するたびに設定モジュールを明示的に渡すことができます。
例(Unix Bashシェル):
export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver
例(Windowsシェル):
set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver
--settings
コマンドライン引数を使用して、設定を手動で指定します。
django-admin runserver --settings=mysite.settings
サーバー上(mod_wsgi)
ライブサーバー環境では、使用する設定ファイルをWSGIアプリケーションに指示する必要があります。 os.environ
でそれを行います:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
Django WSGIアプリケーションの詳細およびその他の一般的な要素については、 Djangomod_wsgiのドキュメントをお読みください。
デフォルトの設定
Django設定ファイルは、必要がなければ設定を定義する必要はありません。 各設定には、適切なデフォルト値があります。 これらのデフォルトは、モジュールdjango/conf/global_settings.py
にあります。
Djangoが設定のコンパイルに使用するアルゴリズムは次のとおりです。
global_settings.py
から設定をロードします。- 指定された設定ファイルから設定をロードし、必要に応じてグローバル設定を上書きします。
設定ファイルは冗長であるため、global_settings
からインポートしない必要があることに注意してください。
変更した設定を確認する
コマンドpython manage.py diffsettings
は、現在の設定ファイルとDjangoのデフォルト設定の違いを表示します。
詳細については、:djadmin: `diffsettings` のドキュメントを参照してください。
Pythonコードで設定を使用する
Djangoアプリで、オブジェクトdjango.conf.settings
をインポートして設定を使用します。 例:
from django.conf import settings
if settings.DEBUG:
# Do something
django.conf.settings
はモジュールではなく、オブジェクトであることに注意してください。 したがって、個々の設定をインポートすることはできません。
from django.conf.settings import DEBUG # This won't work.
また、コードはglobal_settings
または独自の設定ファイルからインポートしないでください。 django.conf.settings
は、デフォルト設定とサイト固有の設定の概念を抽象化します。 単一のインターフェースを提供します。 また、設定を使用するコードを設定の場所から切り離します。
実行時の設定の変更
実行時にアプリケーションの設定を変更しないでください。 たとえば、ビューでこれを行わないでください。
from django.conf import settings
settings.DEBUG = True # Don't do this!
設定に割り当てる必要がある唯一の場所は、設定ファイルです。
安全
設定ファイルにはデータベースパスワードなどの機密情報が含まれているため、アクセスを制限するためにあらゆる試みを行う必要があります。 たとえば、ファイルのアクセス許可を変更して、自分とWebサーバーのユーザーだけが読み取ることができるようにします。 これは、共有ホスティング環境では特に重要です。
独自の設定を作成する
独自のDjangoアプリ用に独自の設定を作成することを妨げるものは何もありませんが、次のガイドラインに従ってください。
- 設定名はすべて大文字にする必要があります。
- 既存の設定を作り直さないでください。
シーケンスである設定の場合、Django自体がリストを使用しますが、これは単なる慣例です。
DJANGO_SETTINGS_MODULE を設定せずに設定を使用する
場合によっては、 DJANGO_SETTINGS_MODULE 環境変数をバイパスしたい場合があります。 たとえば、テンプレートシステムを単独で使用している場合は、設定モジュールを指す環境変数を設定する必要がない可能性があります。
このような場合、Djangoの設定を手動で構成できます。 これを行うには、次の電話を呼び出します。
- django.conf.settings.configure(default_settings, **settings)
例:
from django.conf import settings
settings.configure(DEBUG=True)
configure()
に必要な数のキーワード引数を渡します。各キーワード引数は、設定とその値を表します。 各引数名はすべて大文字で、上記の設定と同じ名前にする必要があります。 特定の設定がconfigure()
に渡されず、後で必要になった場合、Djangoはデフォルトの設定値を使用します。
大規模なアプリケーション内でフレームワークの一部を使用している場合は、この方法でDjangoを構成することがほとんど必要であり、実際に推奨されます。
したがって、settings.configure()
を介して構成された場合、Djangoはプロセス環境変数に変更を加えません(これが通常発生する理由については、:setting: `TIME_ZONE` のドキュメントを参照してください)。 これらの場合、環境はすでに完全に制御されていると想定されます。
カスタムデフォルト設定
デフォルト値をdjango.conf.global_settings
以外の場所から取得する場合は、デフォルト設定をdefault_settings
引数(または最初の位置引数)として提供するモジュールまたはクラスを渡すことができます。 configure()
への呼び出しで。
この例では、デフォルト設定はmyapp_defaults
から取得され、 [の値に関係なく、:setting: `DEBUG` 設定はTrue
に設定されます。 X154X]:
from django.conf import settings
from myapp import myapp_defaults
settings.configure(default_settings=myapp_defaults, DEBUG=True)
myapp_defaults
を位置引数として使用する次の例は、同等です。
settings.configure(myapp_defaults, DEBUG=True)
通常、この方法でデフォルトをオーバーライドする必要はありません。 Djangoのデフォルトは十分に飼いならされているため、安全に使用できます。 新しいデフォルトモジュールを渡すと、Djangoのデフォルトが完全に置き換えられるため、インポートするコードで使用される可能性のあるすべての設定に値を指定する必要があることに注意してください。 完全なリストについては、django.conf.settings.global_settings
をチェックインしてください。
configure()または DJANGO_SETTINGS_MODULE のいずれかが必要です
DJANGO_SETTINGS_MODULE 環境変数を設定していない場合は、設定を読み取るコードを使用する前に、ある時点で を呼び出す必要があります。
DJANGO_SETTINGS_MODULE を設定せず、configure()
を呼び出さない場合、Djangoは最初に設定にアクセスしたときにImportError
例外を発生させます。
DJANGO_SETTINGS_MODULE を設定し、設定値に何らかの方法でアクセスし、次にがconfigure()
を呼び出すと、Djangoはその設定を示すRuntimeError
を生成しますすでに構成されています。 この目的のためのプロパティがあります:
例えば:
from django.conf import settings
if not settings.configured:
settings.configure(myapp_defaults, DEBUG=True)
また、configure()
を複数回呼び出したり、設定にアクセスした後にconfigure()
を呼び出したりするとエラーになります。
つまり、configure()
または DJANGO_SETTINGS_MODULE のいずれかを正確に使用します。 両方ではなく、どちらでもありません。
「スタンドアロン」のDjangoを使用するには、django.setup()を呼び出す必要があります
Djangoの「スタンドアロン」のコンポーネントを使用している場合(たとえば、いくつかのDjangoテンプレートを読み込んでレンダリングするPythonスクリプトを記述したり、ORMを使用していくつかのデータをフェッチしたりする場合)、設定の構成に加えて、もう1つの手順が必要になります。 。
DJANGO_SETTINGS_MODULE を設定するか、configure()
を呼び出した後、 django.setup()を呼び出して設定をロードし、 Djangoのアプリケーションレジストリにデータを入力します。 例えば:
import django
from django.conf import settings
from myapp import myapp_defaults
settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()
# Now this script or any imported module can use any part of Django it needs.
from myapp import models
django.setup()
の呼び出しは、コードが本当にスタンドアロンである場合にのみ必要であることに注意してください。 Webサーバーによって、または django-admin を介して呼び出されると、Djangoがこれを処理します。
django.setup()
は1回だけ呼び出すことができます。
したがって、アプリケーションの他の場所のスクリプトからインポートする必要があるように、スタンドアロンスクリプトに再利用可能なアプリケーションロジックを配置することは避けてください。 それを避けられない場合は、django.setup()
への呼び出しをif
ブロック内に置いてください。
if __name__ == '__main__':
import django
django.setup()