アプリケーションの開発
プロジェクトを作成したら、次にアプリケーションを作成します。
アプリケーション作成コマンド実行
アプリケーションを作成するには、プロジェクトフォルダ(著者の場合「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件のレコードが作成されているのが確認できました。
- 修正履歴
-
- 2009/07/15 15:12 「各スクリプト言語の思想・哲学」を中見出しから大見出しに変更した。
この記事は参考になりましたか?
- Djangoチュートリアル連載記事一覧
-
- Djangoチュートリアル(後編)
- Djangoチュートリアル(前編)
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
