前の記事では、本棚アプリを作る準備を整えました。
ここから具体的に本棚アプリを作っていきましょう。まずは、本の情報を保存するための機能を作っていきます。
もう一度プロジェクトの全体像を確認しながら、modelについて学んでいきましょう。
booklibraryアプリでは、views.pyの右にmodels.pyがあります。
このmodels.pyは、データを保存したり、取り出したりするときの設定を記録する(データベースの取扱説明書のようなイメージの)ファイルです。
つまり、models.pyファイルを編集することで、本のデータを保存するための機能を付け加えることができるのです。
ちなみに、モデルはdjangoで使われる言葉ですが、データベースはプログラミングで一般的に使われる言葉です。
データベースは一般的な言葉、モデルはdjango用にカスタマイズされたもの。というイメージを持つと良いかもしれません。
まずは、データベースについて簡単に説明していきます。
データベースとは
データベースのイメージは、エクセルのようなものです。
例えば、何かの統計を出したり、複数のデータを効率よく保存するうえでは、ワードファイルではなくエクセルを使ったほうが簡単ですよね。
ワードでもエクセルでもデータは同じなのですが、保存や管理の方法がシステムによって変わってくるのです。
そして、この考え方はウェブサイトでも同じです。たとえば、ECサイトなどでは商品やユーザーなどのデータ(情報)を管理する必要がありますが、これを簡単に管理するためには、データベースというシステムを使った方が便利なのです。
データベースは、データを効率よく管理するためのシステム。というイメージを持ちましょう。
データベースを使うためには
データベースを使うためには、データベースサーバーを準備し、そのデータベースサーバーにアクセスしてデータの出し入れをすることが一般的です。
つまり、データベースを使うには手間がかかります。
しかし、djangoにはデータベースを簡単に使うための機能が備わっています。
その機能を使うことによって、簡単にデータベースを作ることができるようになるのです。
具体的には、models.pyファイルにデータベースに関するコードを書くだけで、データベースを操作することができるようになるのです。
ここから、djangoでのデータベースの使い方について学んでいきましょう。
データベースが作られるまでの流れ
まずは、djangoでデータベースが作られるまでの流れについてざっくりと見ていきましょう。
その流れは、以下の通りです。
models.pyファイルでモデル(データベースの型)を作る
↓
migrationファイル(型にもとづいて作られたデータベース作成の指示書)を作る
↓
migrateする(データベースを作る)
というものです。
それぞれの内容について順番にみていきましょう。
モデルを作る
まずはモデルを作ります。モデルとは、データベースの「型」のようなものです。
例えば、ユーザーを管理するためのモデルであれば、「ユーザー名(他のユーザーとの重複なし)」、「パスワード(半角英数字が必須)」、「メールアドレス」といった情報を整理する必要があります。
データベースシステムを使ってこれらのデータを作成する場合、複雑なコマンドを打たなければいけないのですが、djangoでは、models.pyファイルを使えば簡単にデータベースの原型を作ることができます。
実際にモデル作ってみましょう。
モデルは、models.pyというファイルに書きこんで作ります。
booklibraryアプリの中の、models.pyファイルを開き、コードを書いていきましょう。
コードmodels.py
1 from django.db import models
2 class BookModel(models.Model):
3 bookname = models.CharField()
4 summary = models.TextField()
5 rating = models.IntegerField()
コードの解説(1) 1行目で、modelsモジュールを読み込んでいます。これは、データベースを簡単に作るために必要な情報が入っています。
(2) BookModelという名前でクラスを作成しました。新しいデータベースを作るには、class定義をすることによって作成します。また、modelsモジュールからModelsクラスを継承しています(Modelsクラスで定義されているメソッドや属性を使えるようにしています)。
継承についてしっかりと理解したい方は、継承について分かりやすく解説という記事を参考にしてみて下さい。
(3) 3行目で、nameというフィールドを作りました。このフィールドはテキストを入力することができるような設定にしています。
保存するデータに条件を付ける場合は、関数内で設定をする
また、データを作るにあたって条件を付ける場合は、データの種類をしているしている関数の中でその設定をします。
例えば、文字数を50字以内にしたい場合はこのように書きます。
コードname = models.CharField(max_length = 50)
もちろん、modelsにはCharFieldだけではなく、沢山のフィールドがあります。
ragtingで設定したIntegerfieldもその一つです。
これから少しずつご紹介していきますが、djangoには多くのフィールドがあるということを頭に置いておきましょう。
フィールドの種類について確認したいかたは、Djangoのオフィシャルサイト(モデルフィールド)を参考にしてみて下さい。
migrationファイルを作る
モデルを作った後は、migrationファイルを作ります。
migrationファイルとは、models.pyで作ったデータベースの型(原型)を整理したファイルのことです。
このmigrationファイルは、上書きされず、更新があるたびに新しいファイルが作られていきます。
migrationファイルを作るには、manage.pyコマンドを使います。
コマンドライン$ python manage.py makemigrations
このコマンドを打つことによって、migrationファイルができます。
以下のようなコードが表示されました。
コマンドラインMigrations for 'hellohello':
hellohello/migraions/0001_initial.py
- Create model PostModel
0001_initial.pyというマイグレーションファイルができました。
migrateをしてデータベースを作成する
最後はmigrateです。これは、migrationファイルの内容に基づいて、実際にデータベースを操作し、テーブルを作成したり編集したりすることです。
早速migrateしてみましょう。
migrateをする場合も、manage.pyコマンドを使います。
$ python manage.py migrate
少し長いですが、このようなコードが表示され、データベースが作成されます。
コードが長いのは、一番最初にmigrateした時は、djangoがデフォルトで設定しているテーブル(ユーザー情報が入ったテーブルなど)を作成するからです。
Operations to perform:
Apply all migrations: admin, auth, contenttypes, hellohello, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying hellohello.0001_initial... OK
Applying sessions.0001_initial... OK
データを使う方法
無事にデータベースを作ることができました。
次からは、このデータベースの使い方について説明していきます。
実際にデータを操作していきましょう。