Web制作、Web開発の歩き方

初心者のためのDjango入門

■第4話:本番環境におけるDjangoの設定と構成

(最終更新日:2023.04.11)

Djangoフレームワークのイメージ
この記事は6分で読めます!
(絵が小さい場合はスマホを横に)

「設定ってどこで変更するの?」

Djangoを使う時、基本操作と同じくらい大事なのが設定ファイルの使い方だ。 Djangoの設定はsetting.pyに書く。ここでは、本番環境でのsetting.pyの設定とDjangoの構成について説明する。


1.本番環境におけるDjangoの設定(setting.py)

Djangoの設定ファイル(setting.py)は、プロジェクトと同名のアプリケーションディレクトリ内にある。 このファイルを開くと、いくつかの設定項目が表示される。 最初に変更が必要なのがDEBUG(下記左)で、デフォルトではDEBUGの表示はTrueになっている。 開発環境ではDEBUGを表示しても問題ないが、本番環境で表示するとエラー発生時に不要な情報がユーザーに漏れることがある。 本番環境にデプロイする際は、DEBUGをFalseにすることを忘れないようにしよう。

ALLOWED_HOSTSは、公開を許可するドメインを指定する場所だ。 テスト環境ではlocalhostを、本番環境では使用しているドメインを指定しよう。 さらに、その下にあるアプリケーションの部分では、現在使用しているアプリケーションを宣言する。 新しいアプリケーションを作成したり、Django REST Frameworkのようなインストール済みアプリを追加したりする場合は、必ず記述しよう。

Middleware(下記右)は、リクエストが送信されたり、レスポンスが返されたりする際に実行される処理だ。 最初はあまり触らないでおくのが良いだろう。 慣れてくると自作のミドルウェアを作る人もいるが、今の段階ではただ存在を認識しておけば十分だ。 また、その下のROOT_URLCONFはデフォルトの設定で問題ない。 指定されたディレクトリのurls.pyが読み込まれ、ルーティングが行われる仕組みになっている。

TEMPLATESは、変更することがよくある設定のひとつだ。 デフォルトでは、各アプリケーションディレクトリにtemplatesディレクトリを配置し、HTMLを表示する仕組みになっている。 ただ、この方法だとTemplateファイル(HTML)が各ディレクトリに散らばってしまうことがある。 Templateファイルを一箇所にまとめたい場合は、BASE_DIR(一番上のディレクトリ直下)にtemplatesディレクトリを設置し、 その場所を指定することができる。下記右下のDIRSでその設定が記述されている。

setting.pyで表示される情報の抜粋(デバッグ、テンプレートディレクトリの設定など)

さらに設定を見ていくと、下記左にデータベースの設定がある。 デフォルトではsqliteが設定されているが、本番環境でよく使われるMySQL(MariaDB)やPostgreSQLに変更することも可能だ。 下記の例ではMySQLの設定が示されており、ユーザー名、パスワード、ポートなどを設定して接続することができる。

さらにその下には言語コードとタイムゾーンの設定がある。 日本で利用する場合は、デフォルトのen-usをjaに、UTCをAsia/Tokyoに変更しよう。

続いて、staticディレクトリ(静的ファイルの置き場所)の設定がある。 これは、画像ファイルやCSS、JavaScriptファイルを置く場所の設定だ。 これもTEMPLATESディレクトリと同様に、BASE_DIR(一番上のディレクトリ直下)に設定することが一般的だ。

さらに、URLの末尾にスラッシュを付ける設定やユーザー認証(ログイン)に関する設定があるが、今回は存在についてのみ触れる。 最後に、サインアップや問い合わせ時にユーザーや管理者に送るメールの設定について説明する。 開発環境の場合は、EMAIL_BACKENDをコンソールに出力するように設定(コメントアウトしてある方)する。 本番環境ではSMTPを選択し、配信元となるメールサーバーのホストURLやポート、メールアドレス、パスワードを設定する項目が存在する。

setting.pyで表示される情報の抜粋(DB、timezone、各種ディレクトリ位置、メール送信の設定)

2.本番環境におけるDjangoの構成

第1話ではDjangoの全体像について解説した。 今回はこれまでの復習も兼ねて、Webサーバーを含めた構成図を紹介する。 下図はDjangoとWebサーバーを示すもので、右側のDjangoの仕組み部分(middlewareより右側)は、 1話~3話を読んでいれば理解できるはずだ。

ここで、左側のWebサーバーとの連携について話をしよう。 開発時はWebサーバーを使用せず、代わりにDjango内蔵のmanage.pyをrunserverさせることで、 ブラウザ上で表示が可能になる(manage.pyが「Webサーバー+wsgi.py」に代わり、簡易サーバーの役割を果たす)。 ただし、manage.pyは並列処理やプロセスの自動再起動ができないため、アクセスが多い本番環境には向かない。

本番環境では、ApacheやNginxと連携(デプロイ)して運用することになる。 デプロイの詳細は技術書や別のサイトに譲るが、要点としては、 wsgiというインターフェースがApache(Webサーバー)とDjango(アプリケーションサーバー)の仲介をしている。 つまり、wsgiと連携できるWebサーバーであれば、Djangoはデプロイできるということだ。 ちなみに、wsgiはPython共通のインターフェースであり、wsgiが使えれば、Flaskなどの別のPythonウェブフレームワークも利用できることを意味する。

最後に、これまで触れていなかったadmin.pyについて説明しよう。 これは非常にシンプルなものだ。Djangoデフォルトの管理ページで管理するかどうかを設定するファイルである。 admin.pyに「admin.site.register(モデル名)」を追記することで、管理サイトで管理できるModel(データベースのテーブル)を増やすことができる。これにより、管理画面からデータの追加や編集が容易になる。

Djangoの構成図


▼参考図書、サイト

 「Djangoのツボとコツがゼッタイにわかる本」 大橋亮太 秀和システム
 「現場で使えるDjango管理サイトのつくり方」 横瀬明仁
   言語を日本語に切り替える方法【settingsファイルで一発です】 Code for Django
   WEBサーバのinterfaceのイメージはこんな感じだろうか〜CGI, FastCGI, Apacheモジュール, WSGI〜 Blow Up by Black Swan
   djangoは誰が動かしているのか?(デプロイのための俯瞰) Qiita