スライドショー

【Django入門】Djangoアプリの設計哲学!MTVモデルをmodelsを通して学ぼう!

今回は、PythonのDjangoで使われるmodelの書き方や使い方について解説します。

modelはデータベースと深い関わりがある、Djangoを構成する重要な要素の一つです。

この記事では、

・MTVモデルとは何か
・modelの作り方

について解説します。さらに、

・フィールドを使う方法

についての解説を通して、modelの知識を深めていきましょう。

MTVモデルとは

今回学ぶmodelの前に、まずはMTVモデルと呼ばれる設計思想について学んでいきましょう。

DjangoはMTVモデルを採用しています。

MTVとは、

・Model(データベースに格納されているデータ)
・Template(テンプレートファイルによって定義されたそれぞれのページのデザイン)
・View(どのページを表示させるかを決定する処理)

の頭文字を取ったものです。

図にしてみるとこのようになります。

django_mtv

よく似た設計にMVC(Model、View、Controller)というモデルもあります。

MVCモデルの場合は、

・Model(データベースに格納されているデータ)
・View(ページをどのように見せるのかを決定する処理)
・Controller(ユーザーからの入力をModelに伝える処理)

になります。

MVCモデルを採用しているフレームワークには、Ruby on Railsがあります。

modelとは

これから学んでいくmodelは具体的にどのような役割をするのか、見ていきましょう。

modelはデータベースに格納されているデータを扱います

Djangoではデータベースを直接扱わなくても良いように、models.pyに記述されているクラスを操作することで、データベースを操作することが出来ます。

modelを使うと、データベースの管理がとても楽に、コードを最小限にしながらWebアプリケーションを作ることが出来ます。

データベースについては、こちらの記事をご覧ください。

【Django入門】Databaseの使い方
更新日 : 2018年3月8日

今回の記事ではmodelの扱い方について、解説していきます。

また、後半にはフィールドというmodelを扱う場面では必須になる概念についても解説します!

modelの作り方

ここからは実際にmodelを編集して、実際の動作を見てみましょう。

Djangoのインストール方法

まずはDjangoをインストールしましょう。

DjangoはPythonのパッケージとして提供されています。

インストール方法はこちらの記事をご覧ください。

【Django入門】あなたのパソコンにDjangoをインストール!
更新日 : 2019年1月29日

プロジェクトとアプリケーションの作成

インストールが出来たら、次はプロジェクトアプリケーションを作成していきます。

プロジェクトをまず最初に作っていきましょう。

プロジェクトを作成したいディレクトリに行き、このコマンドを実行します。

django-admin startproject mySite

mySiteは自分の好きなプロジェクト名で構いませんが、これからの記事ではすべてmySiteというプロジェクト名を想定して解説をしていきます!

実行すると、mySiteというディレクトリが出来上がります。

このディレクトリに必要なファイルが全て含まれています。

さらに今出来上がったディレクトリ(mySite)に移動して、このコマンドを実行します。

python manage.py startapp myapp

このコマンドを実行すると、プロジェクト内にmyappというWebアプリのテンプレートができます。

myappの部分はmySiteと同じく、好きなプロジェクト名で構いませんが、これからの記事ではすべてmyappというアプリケーション名を想定して解説をしていきます!

最後に、データベースを扱う場合はこのコマンドをmySiteディレクトリで実行する必要があります。

python manage.py migrate

これで、プロジェクトにデータベースの構築に必要なファイルが追加されました。

これで、準備は完了です。

models.pyの書き方

ここからは実際にmodels.pyを編集していきましょう!

models.pyはmyapp/models.pyにあります。

今回はPersonクラスに、人物の情報を追加できるデータベースを作ってみましょう。

Pythonのクラスについてはこちらのページで詳しく解説しています。

【Python入門】クラスの使い方を簡単解説で楽々マスター
更新日 : 2019年7月31日

models.pyをこのように編集しましょう。

from django.db import models
 
class Person(models.Model):
    last_name = models.CharField(max_length=20)
    first_name = models.CharField(max_length=20)

models.pyに追加するPersonなどのクラスは、すべてdjango.db.models.Modelサブクラスとして動きます。

このmodels.pyの動作を、データベースで考えてみましょう。

データベースでの動きは、Personというテーブルを作り、last_nameとfirst_nameというフィールドを設定したことになっています。

フィールドには他にも、

・日時のフィールドであるDateTimeField
・EmailアドレスのフィールドであるEmailField

など、modelの作成がより便利になるフィールドがたくさん用意されています。

次に、作ったmodelをDjangoに知らせましょう。

mySite/settings.pyのINSTALLED_APPSに、1行追加します。

INSTALLED_APPSにはDjangoに「どの機能を使うのか」を知らせる役割があるので、今後も頻繁に出てきます。

INSTALLED_APPS = [
    'myapp.apps.MyappConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

2行目に追加されている「'myapp.apps.MyappConfig',」について解説します。

文字の並びを見て分かるように、myappというアプリケーションの中の、apps.pyの中の、MyappConfigを、読み込んでいます。

Djangoにアプリケーションの追加が終わった所で、このコマンドを実行しましょう。

python manage.py makemigrations myapp

makemigrationを実行することで、Djangoにmodelの変更を知らせて、migrationファイルを作成します。

migrationファイルを反映させるためには、migrateを行わなければなりません。

python manage.py migrate

これで、データベースにmodels.pyを反映させることが出来ました。

これまでの作業をまとめてみると、

1.modelを書く
2.python manage.py makemigrationsの実行
3.python manage.py migrateの実行

の流れになります。

Django shellを使った確認方法

models.pyからデータベースに追加したものを、確認してみましょう。

確認にはDjango shellを利用します。

このコマンドを実行してみましょう。

python manage.py shell

このコマンドを実行すると、コンソールが起動すると思います。

ここにデータを追加してみましょう。

>>>from myapp.models import Person
 
>>>p = Person(last_name="Python", first_name="Taro")
 
>>>p.last_name
Python
 
>>>p.first_name
Taro

1行目で先ほど作成したPersonクラスをimportしています。

last_nameとfirst_nameに入れた文字列がしっかりと反映されていることが確認できましたね。

これはデータベースとのやり取りがしっかりと出来ている証拠になります。

このようにPythonだけを使用して、データベースを操作できることにDjangoの手軽さがあります。

Django shellではRuby on Railsのようにコンソール上で動作を確認することも出来ます。

フィールドについて

ここからは先程から登場していたフィールドについて、もう少し詳しく見ていきましょう。

フィールドとは

先程はmodels.CharFieldという、文字を扱うフィールドを使いました。

フィールドは保存したいデータを表すために、Djangoに最初から用意されているデータの入れ物のようなものです。

フィールドがあることによって、複雑なデータベースの操作をとても楽に行うことができます。

models.DateTimeFieldを使ってみよう

models.CharFieldは先程使ってみましたね。

今回は、models.DateTimeFieldを使って、コンソールでcreateしたときの現在時刻と、saveしたときの現在時刻を表示してみましょう。

models.pyをこのように編集します。

from django.db import models
 
class Person(models.Model):
    last_name = models.CharField(max_length=20)
    first_name = models.CharField(max_length=20)
    created = models.DateTimeField(auto_now_add=True)
    saved = models.DateTimeField(auto_now=True)

createdと、savedという変数に、それぞれmodels.DateTimeFieldを追加しています。

auto_now_addと、auto_nowという引数をTrueにしています。

これはcreateした時点とsaveした時点で時刻を記録するために、有効にしなければならない引数になります。

これで、先程のようにコンソールでlast_nameとfirst_nameを指定した際に、自動的に時刻が記録されるようになりました。

まとめ

この記事ではDjangoでmodelを扱うときに必要な知識を解説してきました。

データベースの基礎知識を持つだけで、Pythonから簡単にデータベースを触れるのはDjangoならではの機能です。

これまでデータベースに高い壁を感じていた人も、とても身近なものに感じられたのではないでしょうか。

データベースを利用するとWebアプリケーションで出来ることが格段に増えます。

ぜひmodelをうまく使ったサイト構築をしてみてください。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ryo

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説