Djangoのファイルについて:Vasyworks解説

VasyworksはDjangoを利用しています。そのためVasyworksのファイル構成はDjangoのルールに沿ったものとなっています。Djangoではプロジェクト(システム)のルートディレクトリの下に各アプリケーション(機能)のサブディレクトリが配置されます。

■ Djangoのプロジェクトのファイル構成

下記は「my_system」プロジェクトのファイル構成例です。プロジェクトのルートディレクトリmy_systemの配下にアプリケーション毎のディレクトリや、プロジェクトの設定情報のためのディレクトリ、スタイルシートや画像、JavaScriptなどの静的ファイル配置するためのstaticディレクトリ、テンプレートファイルを配置するためのtemplatesディレクトリ、ユーザがアップロードしたファイルを保管するためのmediaディレクトリなどのサブディレクトリがあります。

directory my_system
directory media
directory ・・・
directory my_app_1
directory forms
file __init__.py
file form_1.py
file form_2.py
file form_3.py
directory models
file __init__.py
file model_1.py
file model_2.py
file model_3.py
directory views
file __init__.py
file view_1.py
file view_2.py
file view_3.py
file __init__.py
file app.py
file urls.py
directory my_app_2
directory ・・・
directory my_system
file __init__.py
file settings.py
file urls.py
directory static
directory css
file style.css
directory images
file logo.png
directory js
file main.js
directory ・・・
directory templates
directory my_app_1
file index.html
file page_1.html
file page_2.html
directory my_app_2
file ・・・
directory ・・・
directory ・・・

まず、アプリケーション毎のサブディレクトリやプロジェクトの設定情報のサブディレクトリなど、Pythonファイル(拡張子が.pyのファイル、以下pyファイル)を配置する各ディレクトリには__init__.pyというサブディレクトリの初期情報を記載するpyファイルを配置します。多くの__init__.pyは空のファイルですが、必要に応じて記述する必要があります。(後述)

プロジェクトの設定情報のpyファイルはプロジェクト名と同じ名前のサブディレクトリ(この場合はプロジェクトルートの下のmy_systemディレクトリ)に配置します。settings.pyにはDjangoの設定情報やデータベースの設定、プロジェクト固有の設定情報を記載します。また、このディレクトリのurls.pyにはプロジェクトルートURLからのURL設定を記載します。このurls.pyでは各アプリケーションのURL設定は各アプリケーション毎のサブディレクトリにあるurls.pyを参照するという設定なども記載します。

各アプリケーション毎のモデルやビュー、入力フォーム項目定義のファイルはそれぞれのサブディレクトリ(この場合はmy_app_1やmy_app_2)の下に配置します。モデルやビュー、入力フォーム項目定義のクラスはDjangoの入門用の解説ではmodels.pyやviews.py、forms.pyという、それぞれ1つのファイルに記述するという風に説明されていますが、Vasyworksではクラスが多く、一つのファイルに記述するとメンテナンスしにくいため、原則として1クラス1ファイルになるように作っています。そのためにmodels、views、formsのそれぞれのサブディレクトリを各アプリケーションのディレクトリの下に作っています。それぞれのディレクトリには各クラス毎にファイルを作成します。そして各ディレクトリに配置している__init__.pyにクラスのインポート定義を下記のように記述します。

from .view_1 import View1
from .view_2 import View2
from .view_3 import View3

__init__.pyに記述することで、他のpyファイルでインポートする際に

from my_app_1.views import View1
from my_app_1.models import Model1
from my_app_1.forms import Form1

という風に記述して使用することができます。

各アプリケーションのディレクトリにあるapp.pyにはアプリケーション名を記述します。またurls.pyには各アプリケーション毎のURL設定を記述します。このurls.pyでは主にどのURLに対してどのビュークラスを呼び出すかという指定を行います。

各アプリケーションのテンプレートファイルはtemplatesディレクトリの下に、各アプリケーション名のサブディレクトリを作成して配置します。

Djangoの慣例としてスタイルシートやJavaScript、画像ファイルなどの静的ファイルはstaticディレクトリに配置します。staticディレクトリに配置されたファイルはそのまま公開されるようにHTTPサーバを設定することになりますので、公開してはいけない画像はこのディレクトリには配置しないようにしてください。また、ユーザがアップロードしたファイルはmediaディレクトリの配下に保管するのがDjangoの慣例です。mediaディレクトリはHTTPサーバの設定によりstaticディレクトリのように公開させることもできますが、Vasyworksではmediaディレクトリの配下にあるファイルを参照する際にはユーザ認証を必要とするようにしています。

→ Vasyworks 解説 目次