はじめに
- Djangoのチュートリアルをやってみて、説明されている概念がすんなり腑に落ちなかったので、自分の理解を元にして、Djangoのとっかかりとしてあるべき形を考えてみました。
概念図
Model、Template、View、URLConf
- 一般にURLConfは、Viewの一部とされていて、Model、Template、Viewを並べて「MTV」と呼ばれます。
- これは、Larabelなら、Model、View、Controllerに相当します。
- Djangoは、データベース(Model)、コンテンツ(View)、URL(URLConf)、外観(Template)を分離して抽象化し、互いに実体を隠蔽しようとします。
- そのため、この記事では、ViewとURLConfを分けて説明しています。
アプリ (App)
- サイトで、ひとまとまりの機能を実現する単位で、実体はPythonのモジュールです。
- アプリ毎に、独自のモデル、テンプレート、ディスパッチャ、ビューを持つことができます。
プロジェクト
- 複数のアプリが組み合わさって、一つのサイトを形成します。
モデル (models.py)
- DBのテーブルをクラスとして表現した設計書です。
- 背後のO/RマッパーがDBを隠蔽しようと尽力しています。
URLディスパッチャ (urls.py)
- サイトのURL構成を定義し、URLを抽象化します。
- クライアントからリクエストされたURLパターンに応じて、複数のアプリやビューに振り分けを行う機構です。
- 生のURLを隠蔽します。
- プロジェクトが総親でアプリが子となる階層構造を成します。
- まず総親でアプリ別に大まかに割り振って、受け取ったアプリ内でさらに細かくビューに割り振る感じです。
ビュー (views.py)
- リクエストに応じて、モデルからデータを取り出し、コンテンツを構成して、テンプレートに描画させる機構です。
- Pythonでガリガリ書きます。
テンプレート (templates/*.html)
- ビューから渡されたコンテンツを埋め込むページの外観やUIを構成します。
- HTMLを拡張した専用マクロ言語で書かれ、レンダリングエンジンが標準HTMLを生成します。
おわりに
- 執筆者は、Python、Djangoともに初学者ですので、誤りもあるかと思います。
- お気づきの際は、是非コメントや編集リクエストにてご指摘ください。
- あるいは、「それでも解らない」、「自分はこう捉えている」などといった、ご意見、ご感想も歓迎いたします。
- 次は、チュートリアルを見直したいです。