データストアによるデータベースの利用 (3/6)
作成:2010-01-03 14:50
更新:2010-05-10 21:26
更新:2010-05-10 21:26
■コントローラーを定義する
では、コントローラーの定義を作成しましょう。今回は、先に作成したMainPageを修正し、フォームを送信してデータを保存するような機能を用意することにします。以下に上げたリストのように、MainPageクラスを修正してください。
ここでは、GETとPOSTでそれぞれデータストアを使った処理を行っています。
GETでは、MyDataのデータを取り出し、テンプレートに渡す処理をしています。データストアでは、データの取得は「クエリーを生成するメソッドを呼び出し、そのクエリーをフェッチしてデータを取得する」といった形で行います。クエリーというのは、データベースに送信するデータ操作のための命令文のようなものです。データストアは、GQLという独自のデータアクセス言語を使ってデータベースにアクセスします。
ただし、そのための命令文をテキストで書いて用意するわけではありません。ここでは、以下のメソッドを使っています。
all――すべてのエンティティを取得するクエリーを生成します。MyData.all()とすれば、MyDataから全エンティティを取り出すクエリーを生成します。
order――取得するクエリーの並び順を指定するものです。これは引数に、並び順の基準となるプロパティ名を指定します。逆順にしたい場合は、プロパティ名の頭にマイナスを付けます。order('-time')というのは、timeプロパティを基準に、逆順にエンティティを並べるクエリーを生成するものです。
こうしてクエリーの生成ができたら、それを実行してエンティティを取得します。これを行うのが「fetch」です。これは、1~2個の引数を必要とします。第1引数には取得するエンティティの数を、第2引数にはデータを取り出す位置をそれぞれ指定します。fetch(10, 0)ならば、一番最初から10個のエンティティを取り出すことになります。
取り出されたエンティティは、配列の形になっています。これをそのままテンプレートに渡し、テンプレート側で表示の処理を行います。
さて、POSTの処理は、送信されたフォームから値を取り出し、MyDataインスタンスを作って保存する、という作業を行っています。インスタンスの作成は、
postでは送信されたフォームの内容をもとにMyDataインスタンスを作成し、それをデータストアに保存する処理をしています。
ここでは、GETとPOSTでそれぞれデータストアを使った処理を行っています。
GETでは、MyDataのデータを取り出し、テンプレートに渡す処理をしています。データストアでは、データの取得は「クエリーを生成するメソッドを呼び出し、そのクエリーをフェッチしてデータを取得する」といった形で行います。クエリーというのは、データベースに送信するデータ操作のための命令文のようなものです。データストアは、GQLという独自のデータアクセス言語を使ってデータベースにアクセスします。
ただし、そのための命令文をテキストで書いて用意するわけではありません。ここでは、以下のメソッドを使っています。
all――すべてのエンティティを取得するクエリーを生成します。MyData.all()とすれば、MyDataから全エンティティを取り出すクエリーを生成します。
order――取得するクエリーの並び順を指定するものです。これは引数に、並び順の基準となるプロパティ名を指定します。逆順にしたい場合は、プロパティ名の頭にマイナスを付けます。order('-time')というのは、timeプロパティを基準に、逆順にエンティティを並べるクエリーを生成するものです。
こうしてクエリーの生成ができたら、それを実行してエンティティを取得します。これを行うのが「fetch」です。これは、1~2個の引数を必要とします。第1引数には取得するエンティティの数を、第2引数にはデータを取り出す位置をそれぞれ指定します。fetch(10, 0)ならば、一番最初から10個のエンティティを取り出すことになります。
取り出されたエンティティは、配列の形になっています。これをそのままテンプレートに渡し、テンプレート側で表示の処理を行います。
さて、POSTの処理は、送信されたフォームから値を取り出し、MyDataインスタンスを作って保存する、という作業を行っています。インスタンスの作成は、
obj = MyData(name=nm,message=msg)このように、引数にそれぞれrequired指定されたプロパティの値を用意します。これでインスタンスが作成されます。後は、「save」メソッドを呼び出すだけで、インスタンスはデータストアに保存されます。データの作成・保存は、非常にシンプルですね。
postでは送信されたフォームの内容をもとにMyDataインスタンスを作成し、それをデータストアに保存する処理をしています。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
class MainPage(webapp.RequestHandler): def get(self): datas = MyData.all().order('-time').fetch(10, 0) params = {'datas':datas, 'message':'項目を記入し送信してください。'} fpath = os.path.join(os.path.dirname(__file__),'views','home.html') html = template.render(fpath,params) self.response.headers['Content-Type'] = 'text/html' self.response.out.write(html) def post(self): nm = self.request.get('name') msg = self.request.get('msg') obj = MyData(name=nm,message=msg) obj.save() self.redirect('/')
※関連コンテンツ
「PythonによるGoogle App Engine(GAE)プログラミング入門」に戻る