2018年5月23日水曜日
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/05/djangosettingspy.html

Djangoのsettings.pyの役割を解析!!

Djangoでプロジェクトを作成した時に最初から付いてくる「setting.py」。
まあ、名前を見れば設定ファイルであることは分かりますが、中身に書いてあるパラメータの意味はパッと見では分かりません。

heibon_django(親フォルダ)
    heibon_django/
          __init__.py
          settings.py ←コレ
          urls.py
          wsgi.py

調べていきます。

概要

長い記事なのでパッと知りたい人はこちらを参照。

パラメータ名 概要
BASE_DIR プロジェクトの絶対パス
SECRET_KEY Django内部機能が使う暗号化用の秘密鍵
DEBUG デバッグモード(True/False)
ALLOWED_HOSTS 起動を許可するURL
INSTALLED_APPS プロジェクトの中に実装したアプリ
MIDDLEWARE プロジェクトに導入しているミドルウェア
ROOT_URLCONF URLファイルのルートパス
TEMPLATES テンプレートファイルの場所
WSGI_APPLICATION WSGIを起動するための参照先
DATABASES DB接続パラメータ
AUTH_PASSWORD_VALIDATORS パスワードのバリデーションポリシー
LANGUAGE_CODE 言語設定。日本語は「'ja'」でOK
TIME_ZONE タイムゾーン。日本は「'Asia/Tokyo'」でOK
USE_I18N、USE_L10N、USE_TZ 地域設定。地域毎に言語表示を切り替えるかどうか(True/False)
STATIC_URL 静的ファイル
詳しくは以下に続きます。

settings.pyの各種パラメータ

BASE_DIR

BASE_DIRは名前のとおり、プロジェクトの絶対パスです。
上のフォルダツリーで言うところの「親フォルダ」のパスが取得出来ます。

SECRET_KEY

SECRET_KEYは暗号化用の秘密鍵です。

Djangoには暗号化用のハッシュ処理が標準搭載されており、その内部ロジックが暗号化に使うための秘密鍵がコレなのです。

うっかりsetting.pyをそのままGitHubにぶっ込んだりしないように気をつけて下さい。
setting.pyの記述は以下のように外部ファイルに外出し出来るので、GitHubに登録してはいけない記述だけは外出ししておくことが可能です。

from heibon_django import settings_secret
SECRET_KEY = setting_secret.SECRET_KEY

DEBUGとALLOWED_HOSTS

先にALLOWED_HOSTSですが、ALLOWED_HOSTSはDjangoが起動した時に許可するホストURLを意味します。


  • ALLOWED_HOSTS = ['www.example.com']

みたいな感じに。
面倒なら*でも入れておきましょう。

そしてDEBUGは開発モードかどうかを意味します。

  • DEBUGをTrueにしていると、ALLOWED_HOSTSは空でもOK。どんなURLでも起動します。
  • DEBUGをFalseにしていると、ALLOWED_HOSTSを設定することが必須になります。

INSTALLED_APPS

INSTALLED_APPSはDjangoプロジェクトの中に実装したアプリを知らせる場所です。

プロジェクト内にソースを突っ込んだだけでINSTALLED_APPSに記述を忘れると、Djangoの「manageコマンド」など、いくつかの機能で見つけられないことになります。

今後、開発を進めていく上で機能が増える度に都度追記していく箇所です。

MIDDLEWARE

ミドルウェア。

「インストールアプリ」と「ミドルウェア」の違いって何だ!?

と思うところですが、「インストールアプリ」が所謂普通の機能の話。

「ミドルウェア」はアプリよりも外側。
リクエストとレスポンスを共通的にフックして行う処理です。

例えば、「DBのメンテナンス中フラグを1にしたら立てたら、全リクエストを一斉に拒否してメンテナンス中画面にしたい」とかね。

各画面にそんな機能を個別実装なんてやってられないから、共通的に一気に設定することが出来るわけです。

私も現時点ではミドルウェアの自主開発は行っていません。
このブログの記事用に後日検証してみたいと思います。

ROOT_URLCONF

URLファイルの場所です。私のプロジェクトだと以下のように書かれています。

ROOT_URLCONF = 'heibon_django.urls'

Djangoはリクエストが来た時、最初にROOT_URLCONFに行って、そこからリクエスト先のURLをツリー形式のように下ってページを特定するという挙動です。

ROOT_URLCONFは、そのルートとなるURLファイルがどれかっていうことです。
ファイルパスみたいなものですね。

heibon_django(親フォルダ)
    heibon_django/
          __init__.py
          settings.py
          urls.py ←コレ
          wsgi.py

TEMPLATES

Webシステムを表示する時の画面テンプレートのテンプレート置き場。
ちなみに多くは画面テンプレートとしてhtmlファイルを置きますが、例えば「メールのテンプレート用にテキストファイルを置きたい!!」とかでも対応しています。

WSGI_APPLICATION

最初は以下のように書かれています。

WSGI_APPLICATION = 'heibon_django.wsgi.application'

これは要するに同じフォルダに入っているwsgi.pyのパラメータをしてしています。
heibon_django(親フォルダ)
    heibon_django/
          __init__.py
          settings.py
          urls.py
          wsgi.py ←コレ

その該当箇所の記述はこれ。
application = get_wsgi_application()

つまりWebシステムをWSGI(ウィズギー)で起動するという意味です。

このWSGIという単語は覚えておいた方が良いです。

WSGIとは、PythonでWebアプリとWebサーバを接続するための標準インターフェースです。
DjangoはWSGIという規格に則ってWebシステムを起動します。

今後、例えば開発が完了したアプリをいざサーバに展開する時に、「ファイルを置いたは良いけどどうやって起動したら良いの?」という疑問にぶち当たると思います。

そんな時、ちゃんと対応しているサーバであれば、「wsgi.pyのパスを設定すればOK! 後は自動で読み込んで起動します!!」という挙動になってくれますので。

PythonWebシステム界では大事な知識です。

DATABASES

そのままDB接続のパラメータを設定する箇所です。

AUTH_PASSWORD_VALIDATORS

Djangoの標準機能でログイン機能を実現する際に使用されるパスワードバリデータ。
例えば、「このシステムのパスワードは8桁以上16桁未満しか許容しない!!」とかやりたい時は、ここに記述を書くだけでOKというものです。

LANGUAGE_CODE

言語設定。
このブログの読者は日本人でしょうから、以下のように書くと良いでしょう。

LANGUAGE_CODE = 'ja'

TIME_ZONE

タイムゾーン設定。
このブログの読者は日本人でしょうから、以下のように書くと良いでしょう。

TIME_ZONE = 'Asia/Tokyo'

USE_I18N、USE_L10N、USE_TZ

地域設定。

日本語地域からアクセスしたら日本語で表示、英語地域からアクセスしたら英語で表示という挙動を解禁するためのパラメータです。

が、私は外国語対応なんて手も足も出ないので。(泣)

日本語しか関係無い人は全部FalseにすればOKです。

STATIC_URL

JavaScriptやスタイルシート、画像など、静的ファイルの置き場所。

終わりに

初期パラメータは以上です。
今後、初期には存在しない独自のパラメータを持ちたいというケースもあると思いますが、独自パラメータをsettings.pyに書いちゃっても問題ありません。

柔軟に設定可能です。


バックナンバー


0 件のコメント:

コメントを投稿

お気軽にコメント下さい。