SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Djangoチュートリアル

Djangoチュートリアル(前編)

Python対応のWebアプリケーションフレームワーク


アプリケーションの開発

 プロジェクトを作成したら、次にアプリケーションを作成します。

アプリケーション作成コマンド実行

 アプリケーションを作成するには、プロジェクトフォルダ(著者の場合「C:¥codezine¥ecsite」)で、以下のコマンドを実行します。ここでは商品ページを表示するためのアプリケーションなので、名前を「itempage」とします。

[リスト12] アプリケーションの作成
> manage.py startapp itempage

 コマンドの実行が完了すると、プロジェクトフォルダの直下に「itempage」というフォルダが作成され、以下の表に示した4つのファイルが作成されます。

アプリケーションを作成すると生成される4つのファイル
ファイル名 説明
__init__.py このディレクトリが Python パッケージであることを Python に知らせるための空のファイル
models.py モデル定義をするためのファイル
tests.py UnitTestを記述するためのファイル
views.py ビュー関数を定義するためのファイル

アプリケーションの追加設定

 アプリケーションを作成したら、Djangoに認識させるためにプロジェクトフォルダの「settings.py」を編集し、INSTALLED_APPSパラメータにアプリケーション名である「ecsite.itempage」を追加します。アプリケーション名は「プロジェクトサイト名.アプリケーション名」となります。名前はPythonのパッケージ名と一致します。

[リスト13] settings.py
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'ecsite.itempage',
)

モデルの作成

 アプリケーションを作成したら、いよいよモデルを作成します。モデルは基本的にデータベースの1テーブルと対応し、フィールドはDBテーブルの1カラムにマッピングします。

モデルのコーディング

 ここでは商品のクラスをコーディングします。アプリケーションフォルダにある「models.py」を次のように編集します。ファイルはUTF-8形式で保存してください。

[リスト14] models.pyの編集(Itemクラスのコーディング)
# -*- 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に反映します。プロジェクトフォルダにて以下のコマンドを実行します。

[リスト15] モデルとDBの同期
> manage.py syncdb

 「Creating table item」と画面に表示されたら成功です。SQLite3 で早速テーブルを確認してみましょう。

[リスト16] 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のシェルからモデルを操作できるようになります。プロジェクトフォルダにて以下のコマンドを実行します。

[リスト17] コマンドラインからのモデル操作
> manage.py shell

 起動したシェル上で次のように打ち込みます。

[リスト18] コマンドラインからのitemモデル操作
>>> from itempage.models import Item
>>> item = Item()
>>> item.item_name='item1'
>>> item.price = 1000
>>> item.save()

 SQLite3でDBを直接確認してみましょう。

[リスト19] SQLite3上のデータ作成確認
> sqlite3 ecsite.sqlite
sqlite> select * from item;
1|item-00001|item1|1000|

 1件のレコードが作成されているのが確認できました。

次のページ
モデルをHTMLに表示する

修正履歴

この記事は参考になりましたか?

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4065 2009/07/16 17:08

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー