簡単な入力後にページ遷移するまで
まだまだ、何をどうすれば何ができるかが理解できていないので、
開発のプロが教える標準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), )
モデルの定義をしているが、受け取ったデータの処理はしていない。この段階だと、単にページ遷移させているだけ。モデルの操作が次の課題となる。
表示画面。
何も入力しないで実行したとき。
実行が成功したとき。