Djangoでサイトを作ってみる – appとデータベース

今回のプロジェクトとしてシンプルな掲示板の作り方を紹介していきたいと思います。

 

Django appを作成

まずはappを作成しましょう。appとは?以下はDjangoの公式サイトhttp://docs.djangoproject.jp/en/latest/intro/tutorial01.htmlから引用したappの定義です。

 

プロジェクトとアプリケーションの違いとは何でしょうか?アプリケーション とは、実際に何らかの処理を行う Web アプリケーションを指します。例えばブ ログシステムや公開レコードのデータベース、単純な投票アプリといった具合 です。プロジェクトとは、あるウェブサイト向けに設定とアプリケーションを 集めたものです。一つのプロジェクトには複数のアプリケーションを入れられ ます。また、一つのアプリケーションは複数のプロジェクトで使えます。

 

appの作成手順は以下です。


# virtualenvが有効になっていない場合は有効化しましょう
cd ~/.venvs/django-test/bin/activate


# プロジェクトのディレクトリに移動
cd ~/projects/djangotest


# 新しいappを作成
python manage.py startapp forum

Atomでプロジェクト開いて新しいappが作成されたのを確認しましょう。

django_startapp

 

MVC(https://ja.wikipedia.org/wiki/Model_View_Controller)をご存じの方は多いと思いますが、DjangoはMVT (Model, View, Template)というデザインパターンを使っています。簡単に説明をするとこのような感じになります。

Model データベース関連のコード

View リクエストの処理

Template ウェブページになにがどのように表示されるかを定義

 

データベースのテーブルを定義する前に今回作成した新しいappをDjangoの設定ファイルに追加しましょう。djangotest内のsettings.pyを開いて、INSTALLED_APPSに’forum’,を追加してファイルを保存します。


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'forum', # これを追加
]

データベースを設計

Djangoは独自のORM(https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%96%A2%E4%BF%82%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0)を使っており、よほどのことがない限り直接SQLでクエリを書く必要はありません。

まずはデータベーステーブルの定義をしましょう。

forumアプリケーション内のmodels.pyを開いて以下を入力します。

 


from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    date_created = models.DateTimeField(auto_now_add=True)
    is_published = models.BooleanField(default=True)

カラムが4つあるPostというテーブルを作成します。

  • max_length=100は文字数の上限が100文字
  • auto_now_add=Trueは現在の日時を自動的に挿入
  • default=Trueは初期値を自動的にTrueに設定

 

Django内でテーブルの定義をしたので、次のステップとして今度は実際にデータベースのテーブルを生成します。まずは新しく定義をされたものからmigrationファイルを生成。

python manage.py makemigrations

python manage.py makemigrationsを実行することによってDjangoはmodels.pyの情報とデータベースの構造を比較し、異なっている部分をmigrationファイルとして保存します。このmigrationファイルを実行することによってmodels.pyとデータベースを同期します。models.pyを編集するたびに新しいmigrationを生成しておくとデータベース設計上の問題が起きた場合簡単に以前のバージョンにロールバックをすることもできます。

migrationを使って実際にデータベースを同期しましょう。

python manage.py migrate

その他のDjangoの初期設定用テーブルも生成されますが、forum appのmigrationが確かに実行されていますね。

Running migrations:
  Applying forum.0001_initial... OK

データベースにちゃんとテーブルが作成されているか確認しましょう。まずはDjangoでデフォルトでされているsqliteのGUIをインストールします。

sudo apt-get install sqliteman

sqlitemanのインストールが完了したら、sqlitemanを開いて、djangotestのプロジェクトフォルダ内のdb.sqlite3のファイルを開きます。

sqliteman_open

テーブルはちゃんと作成されているようです。

sqliteman_post_table

Djangoのmodels.pyでテーブルを定義する場合はidカラムは自動的に追加されます。