簡単な入力後にページ遷移するまで

まだまだ、何をどうすれば何ができるかが理解できていないので、
開発のプロが教える標準Django完全解説―Webアプリケーションフレームワーク (デベロッパー・ツール・シリーズ)3章までの内容を反芻してみる。ModelFormクラスのところはよく分からないので置いておく。
ここで説明されている内容に沿って、ユーザがIDとメールアドレスの登録画面を作ってみることに。以下、作業手順は自分用のメモ。

  • プロジェクトの立ち上げ
$ django-admin startproject inputinfo
  • バックエンドデータベースの設定
    • settings.pyを編集してsqliteを使うことを明示。
...
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'inputinfo.db'
...
  • データベースの初期化
$ ./manage.py syncdb
  • アプリケーションの作成
$ ./manage.py startapp info
  • モデルの定義
    • ここでは、「ユーザ名」「メールアドレス」を定義する。models.pyファイルの中にInfoクラスを定義した。
from django.db import models

class Info(models.Model):
    userid = models.CharField(max_length=10, blank=False)
    email = models.CharField(max_length=20, blank=False)
  • モデルをアプリケーションに組込む
    • 定義したモデルクラスをプロジェクトに組込む。settings.pyのINSTALLED_APPSに以下の文字列を追加する。
'inputinfo.info',
    • settings.pyを変更したので、データベースの構成を変更する。
$ ./manage.py syncdb
  • 入力フォームを作成するために、フォームクラスを定義
    • ユーザへの表示用に、フォームコントロールを配置したページを作成したい。views.pyにInputFormクラスを定義。
class InputForm(forms.Form):
    userid = forms.CharField(max_length=10, label="User's id")
    email = forms.CharField(max_length=20, label='e-mail address')
  • 表示用にテンプレートを記述
    • /inputinfo/info/templatesに以下の、input_form.htmlを保存しておく。
<html>
  <body>
    <form action="./" method="POST">
      <table>{{ form }}</table>
      <input type=submit>
    </form>
    <hr>
  </body>
</html>
  • フォームを表示するビューを作成
    • views.pyに以下のようにビューを書く。
def register(request):
    if request.POST:
        form = InputForm(request.POST)
        if form.is_valid():
            # ここで受け取った値を処理する。
            return HttpResponseRedirect('/inputinfo/updated/')
    else:
        form = InputForm()
    return render_to_response('input_form.html', dict(form=form))
    • 同時に登録完了のビューも作っておく。
def updated(request):
    message = "Your id and e-mail address are registered."
    return HttpResponse(message)
    • ちなみに、views.pyの始めに、いろいろimportしている。
from django import forms
from django.http import HttpResponseRedirect
from django.http import HttpResponse
from django.shortcuts import render_to_response
from models import Info
  • URLConfにビューを追加。
from django.conf.urls.defaults import *
from info.views import *

urlpatterns = patterns('',
    (r'^inputinfo/register/', register),
    (r'^inputinfo/updated/', updated),
)

モデルの定義をしているが、受け取ったデータの処理はしていない。この段階だと、単にページ遷移させているだけ。モデルの操作が次の課題となる。

表示画面。

何も入力しないで実行したとき。

実行が成功したとき。