さて、じゃあMTVについて話していこうか。
Model, Template, Viewの頭文字をとってMTV
ざっくり言うなら「なるべくわけて管理しやすくしようぜ。」ってのがMTV。
たとえば、会社で営業もマーケティングも商品企画も商品開発もぜんぶやってる人はいないでしょ?営業なら営業、商品開発なら商品開発でわけてるはず。
1人1人に役割をもたせて。WEB開発でもおなじ。わかりやすいレベルまで役割をわけて管理するのがMTV。
MTVそれぞれの役割はつぎのようになる。
- Model: データをどのように保管するかの役割
- Template: Web上の見た目をつくる役割
- View: 情報を処理してどのような情報を見せるか決定する役割
Model: データをどのように保管するかの役割
Modelはデータベースだと思ってもらえればいい。SQLではなくPythonのコードでデータベースをつくれる。データ追加、取得、削除、更新もできて見やすい。
たとえば、会員登録させたいとき。
ユーザーを保存しておくデータテーブルをつくりたいとする。データテーブルをつくるPythonコードはつぎのように書く。
class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=20)
くわしくは【入門】Django/models.pyの書きかた使いかたで。
Template: Web上の見た目をつくる役割
Templateはまあ、WEBの見た目を作る部分だね。HTMLとか、CSSとかでやってく部分。ここにプラスして
たとえば、For文をつかうにはつぎのようにする。
{% For name in names %} <p>{{ name }}</p> {% endfor %}
なんでFor文, If文が書けるかっていうと、JinjaテンプレートっていうのもをDjangoでつかってるから。Jinjaテンプレートのおかげでたとえば、
- ブログの投稿リストを少ないHTMLコードでつくれたり
- ユーザーによってWEBに表示する内容を変えられたり
- ヘッダーやフッターなど共通部分を1ファイルで管理できたり
それがTemplate。
View: 情報を処理してどのような情報を見せるかの部分
情報を受け取って、情報を処理にそってどう見せるか判断する役割。たとえば、
- 会員登録したときにユーザーのModelのデータベースに接続とか
- ログイン時に、フォーム内のユーザー名とパスワードがあってるかとか
- 消費税の計算をしてTemplateにデータを渡すとか
ModelとTemplate以外の処理はViewに書くって感じ。くわしくは【入門】Django/views.pyの役割と書きかたで。
まとめ: 3つを理解してWEBアプリ作成を楽しく
- Model: データをどのように保管するかの役割
- Template: Web上の見た目をつくる役割
- View: 情報を処理してどのような情報を見せるか決定する役割
Model, Template, Viewの3つがそろってMTVだ。使えるようになれば、何倍もWEBアプリを作るのが楽しくなる。
何回も読み返して使えるようにしていこう。
たとえば学習として、【Django】forms.pyで値を取得→保存するアプリ【チュートリアル】をやってみるのもアリ。