Django 簡単なサンプル

環境はPython2.5 + Django version 1.0で作成。
DjangoGoogle App Engineでも採用されているので人気もあるみたいです
さて今回は簡単な掲示板アプリを作成します。

プロジェクトの作成(startproject)

python django-admin.py startproject simple_note

アプリケーションの作成(startapp)

cd simple_note
python django-admin.py startapp pad

server起動

python manage.py runserver 0.0.0.0:8000

「It work!」が表示されればOKです

DBの準備

データを格納するDB:MySQLを使用します。文字コードUTF-8です

create database dj_simple_note default character set utf8 ;

settings.pyの編集

データベースの設定をします
ユーザーID、パスワード、DB名、ポートを指定します

DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'dj_simple_note' # Or path to database file if using sqlite3.
DATABASE_USER = 'ユーザー名' # Not used with sqlite3.
DATABASE_PASSWORD = 'パスワード' # Not used with sqlite3.
DATABASE_HOST = 'localhost' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '3306' # Set to empty string for default. Not used with sqlite3.

アプリケーション名(pad)を追加します
タイムゾーンと言語を日本にあわせます

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'pad',
)

TIME_ZONE = 'Japan/Tokyo'
LANGUAGE_CODE = 'ja'

models.py モデルの作成とDB反映

投稿記事モデルを設定します。記事の項目は(タイトル、本文、投稿日時)とします。

class Note(models.Model):
title = models.CharField(max_length=50)
desc = models.TextField()
created = models.DateTimeField()

class Meta:
db_table= "notes"

DBへの反映:テーブルの自動生成

python manage.py syncdb

mysql -uroot -ppassword dj_simple_note

url.pyの編集

URLマッピング・ルーティングの定義を設定します

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
from django.views.generic.list_detail import object_list,object_detail
from django.views.generic.create_update import create_object,update_object,delete_object
from django.views.generic.simple import redirect_to
from django.template import loader,RequestContext

# MODEL
from simple_note.pad.models import Note

urlpatterns = patterns('',
(r'^note/list/*$',
object_list,
dict(queryset=Note.objects.all().order_by('-id'), paginate_by=5)
),
(r'^note/add/*$',
create_object,
dict(model=Note,post_save_redirect='/note/list/')
),
(r'^note/update/(?P\d+)/$',
update_object,
{'model':Note, 'post_save_redirect':'/note/list/', }
),
(r'^note/delete/(?P\d+)/$',
delete_object,
dict(model=Note, post_delete_redirect='/note/list/')
),
)

urls.py を分割したい場合

url.pyはどうしても行数が長くなります。
そんな場合はinclude(path)を使用し別ファイルに分割することができます

(r'^note/', include('simple_note.pad.urls'))
*simple_note/pad/urls.pyが使用されます


テンプレ−トの配置場所

urls.pyの直下にディクトリを作成します、
各テンプレートファイルをtemplates/padの下に置きましょう

TEMPLATE_DIRS = (
"templates",
)


テンプレ−トの作成

表示するそれぞれ画面を作成します。今回は作成するページのテンプレートはは作成しません
以下のような名前にするとテンプレートのファイル名を指定する必要がありません。
もしテンプレート名を変更(既定外に)したい場合はurls.pyで指定できます。

(一覧)note_list.html
(編集・追加共通)note_form.html
(削除確認)note_confirm_delete.html
(詳細)note_detail.html

各テンプレートは別記します