VasyworksはDjangoを利用しています。そのためVasyworksのファイル構成はDjangoのルールに沿ったものとなっています。Djangoではプロジェクト(システム)のルートディレクトリの下に各アプリケーション(機能)のサブディレクトリが配置されます。
■ Djangoのプロジェクトのファイル構成
下記は「my_system」プロジェクトのファイル構成例です。プロジェクトのルートディレクトリmy_systemの配下にアプリケーション毎のディレクトリや、プロジェクトの設定情報のためのディレクトリ、スタイルシートや画像、JavaScriptなどの静的ファイル配置するためのstaticディレクトリ、テンプレートファイルを配置するためのtemplatesディレクトリ、ユーザがアップロードしたファイルを保管するためのmediaディレクトリなどのサブディレクトリがあります。
まず、アプリケーション毎のサブディレクトリやプロジェクトの設定情報のサブディレクトリなど、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ディレクトリの配下にあるファイルを参照する際にはユーザ認証を必要とするようにしています。