11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DjangoのMVT-モデルとモジュールの関係-

Last updated at Posted at 2019-12-24

#目的
Djangoを使うときのMVTパターンと各パターンに対応するモジュールをまとめてみます。
ちなみに、モジュールとは「~.py」のソースファイルのこと。パッケージとはソースファイルを管理するためのフォルダのことです。(Pythonの方言と思ってもらえばOK)

#背景
MVTパターンはよく聞く、Djangoのフレームワークの記事はよく見かける。でもその2つの対応付けがイメージしにくいなと思ったので備忘録としてまとめてみます。
もっと詳しく書いて欲しいところや間違っているところがあればコメントお願いします。

#MVTパターンって?

説明
Model データ管理
View 呼び出し制御
Template ユーザーインタフェース

シンプルに書くとこんな感じでしょうか。
その他にもDjangoフォームという入力データ制御用クラスが使える機能があったりとか、大規模なアプリを作るのであればもう少しアーキテクチャのことを考えて、サービス層とドメイン層わけてとか考えられますが、それはまたいつか細かいバージョンでまとめてみようと思います。

#まずはDjangoプロジェクトの構成
例えば「sample_project」というプロジェクトを作成し、その中に「sample_app」というアプリケーションを作成した場合の基本的な構成を紹介します。
(Djangoプロジェクト作成時にデフォルトでは作られず、自身で追加が必要なフォルダやモジュールには、名前の前に☆をつけます)
(パッケージまたはフォルダの場合、名前の後ろに*をつけます)

sample_project*
  | - sample_project*
       | - settings.py
       | - urls.py
       | - wsgi.py
  | - sample_app*
       | - migrations*
       | - ☆templates*
             | - ☆static*
             | - ☆sample_app*
       | - models.py
       | - views.py
       | - ☆urls.py
  | - manage.py

今回紹介する焦点がMVTなので、関連しないパッケージやモジュールは省略します。

#それぞれの層ごとに対応するモジュールは?
実際に各層ごとに対応するモジュールを紹介していきます。
##Model
Modelに関連するものはこれ

sample_project*
  | - sample_project*
       | - settings.py・・・A
  | - sample_app*
       | - migrations*・・・B
       | - models.py・・・C

A.プロジェクト全体の設定用モジュール
Modelだけで利用するモジュールではないですけど、データベースの設定情報などはここに書きます。

B.migrationsパッケージ
コードベースでデータベースを構築しようとしたときに、makemigrationsコマンドにより生成されるソースファイルが格納されます。
migrateコマンドでここの内容がデータベースに適用されます。

C.各Modelクラスの定義用モジュール
ここに独自のModelクラスを定義していくことになります。
Modelクラスの作り方

##View
Viewに関連するものはこれ
Viewでは呼び出し後の制御のためのView関数の定義だけでなく、どのView関数を呼び出すかというURLディスパッチャの設定が必要になることをしっかり覚えておくことが大事です。

sample_project*
  | - sample_project*
       | - urls.py・・・A
  | - sample_app*
       | - views.py・・・B
       | - ☆urls.py・・・C

A.プロジェクトパッケージ内のurls.py
URLをもとにView関数を呼び出すためのディスパッチャ情報を記載します。
ただし、このモジュールではDjangoプロジェクト内の各アプリケーションを分割するためのURLディスパッチャを記載します。
今回の例ではhttp://~~~~~/sample_project/sample_app/のように
ホスト名以降のアプリケーションの分割までのURLディスパッチャを登録します。

B.各View関数定義用モジュール
ここに独自のView関数を定義します。

C.アプリケーションパッケージ内のurls.py
アプリケーション内の各URLディスパッチャ情報を記載します。このモジュールは自身で追加する必要があります。
上記*A.*によりアプリケーションごとに分割されたURLの続きのURLディスパッチャを登録することになります。
今回の例ではhttp://~~~~~/sample_project/sample_app/homeとかhttp://~~~~~/sample_project/sample_app/editのようなURLが指定できるようにsample_app/の後ろの部分を登録します。

##Template
Templateに関連するものはこれ

sample_project*
  | - sample_app*
       | - ☆templates*
             | - ☆static*・・・A
             | - ☆sample_app*・・・B

A.レンダリング用ファイル(cssファイルやJSファイル)格納用パッケージ
HTML以外に画面の構成に必要なファイルはここに置きます。

B.Templateファイル格納用パッケージ
HTMLファイルはここに置きます。

#まとめ
フレームワーク使うなら、どこに何書けばいいのかを整理することが結構大事です!
今回はひとまずシンプルな構成にしてMVTそれぞれでまずはここを見ないといけないというフォルダやファイルに絞って紹介しました。

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?