アプリケーションの開発
プロジェクトを作成したら、次にアプリケーションを作成します。
アプリケーション作成コマンド実行
アプリケーションを作成するには、プロジェクトフォルダ(著者の場合「C:¥codezine¥ecsite」)で、以下のコマンドを実行します。ここでは商品ページを表示するためのアプリケーションなので、名前を「itempage」とします。
> manage.py startapp itempage
コマンドの実行が完了すると、プロジェクトフォルダの直下に「itempage」というフォルダが作成され、以下の表に示した4つのファイルが作成されます。
| ファイル名 | 説明 |
| __init__.py | このディレクトリが Python パッケージであることを Python に知らせるための空のファイル |
| models.py | モデル定義をするためのファイル |
| tests.py | UnitTestを記述するためのファイル |
| views.py | ビュー関数を定義するためのファイル |
アプリケーションの追加設定
アプリケーションを作成したら、Djangoに認識させるためにプロジェクトフォルダの「settings.py」を編集し、INSTALLED_APPSパラメータにアプリケーション名である「ecsite.itempage」を追加します。アプリケーション名は「プロジェクトサイト名.アプリケーション名」となります。名前はPythonのパッケージ名と一致します。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'ecsite.itempage',
)
モデルの作成
アプリケーションを作成したら、いよいよモデルを作成します。モデルは基本的にデータベースの1テーブルと対応し、フィールドはDBテーブルの1カラムにマッピングします。
モデルのコーディング
ここでは商品のクラスをコーディングします。アプリケーションフォルダにある「models.py」を次のように編集します。ファイルはUTF-8形式で保存してください。
# -*- coding: utf-8 -*-
from django.db import models
# Create your models here.
class Item(models.Model):
item_code = models.CharField(u'商品コード',max_length=256,unique=True)
item_name = models.CharField(u'商品名',max_length=256)
price = models.PositiveIntegerField(u'価格')
start_date = models.DateField(u'掲載開始日',null=True);
def __unicode__(self):
return self.item_code
class Meta:
db_table = 'item'
モデルクラスは、django.db.models.Modelクラスを継承して作成します。ここでは、Itemクラスは、商品コード(item_code)、商品名(item_name)、価格(price)、掲載開始日(start_date)を属性として持つこととします。
各フィールドは型を表現するクラスによって定義され、そのコンストラクタにさまざまな制約を定義することができます。例えばitem_codeフィールドは文字列型なので、CharFieldクラスによって定義され、コンストラクタに最大文字バイト数が256バイト(max_length=256)、テーブル内でユニーク(unique=True)という制約を定義しています。
__unicode__メソッドはインスタンスの文字列表現を返します。ここでは、商品コード(item_code)を返します。モデルに対応するテーブル名は、インナークラスMetaのdb_tableフィールドに名前を指定します。このフィールドを定義しなくても、「アプリケーション名_モデル名」というのがデフォルトのテーブル名(本稿の場合「itempage_item」)になりますが、アプリケーション名が入らないテーブル名の方が一般的と思われますので、ここではテーブル名を明示的に指定します。
モデルとDBの同期
次に作成したモデルをDBに反映します。プロジェクトフォルダにて以下のコマンドを実行します。
> manage.py syncdb
「Creating table item」と画面に表示されたら成功です。SQLite3 で早速テーブルを確認してみましょう。
> sqlite3 ecsite.sqlite
SQLite version 3.6.13
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .dump
(……省略……)
CREATE TABLE "item" (
"id" integer NOT NULL PRIMARY KEY,
"item_code" varchar(256) NOT NULL UNIQUE,
"item_name" varchar(256) NOT NULL,
"price" integer unsigned NOT NULL,
"start_date" date
);
(……省略……)
コマンドラインからモデルを操作する
モデルを作成し、DBと同期すると、Djangoのユーティリティを通じてPythonのシェルからモデルを操作できるようになります。プロジェクトフォルダにて以下のコマンドを実行します。
> manage.py shell
起動したシェル上で次のように打ち込みます。
>>> from itempage.models import Item >>> item = Item() >>> item.item_name='item1' >>> item.price = 1000 >>> item.save()
SQLite3でDBを直接確認してみましょう。
> sqlite3 ecsite.sqlite sqlite> select * from item; 1|item-00001|item1|1000|
1件のレコードが作成されているのが確認できました。
