• ログインログイン
  • 新規登録新規登録

MENU

Google App Engineで遊んでみよう! 第8回

連載Google App Engineで遊んでみよう!

GoogleAppEngineを使った開発レシピです。AWSやさくらインターネットのVPSやレンタルサーバなどの他の有名なクラウド環境と比べると少しクセがあるものの、慣れると非常に楽に開発やローンチができます。一定の範囲内まで無料で活用できるようになっているので、これを機会にぜひ活用してみましょう。

前回までのプログラミング学習コラムに続き8回目の勉強内容です。

こんにちは、ぴかしです。前回で、Twitterクライアントの基本的な機能が完成しました。今回は、Kay Frameworkのモデルを利用し、クライアントに機能を追加してみます!開発環境はMac OS 10.8、Python2.7、GAE SDK 1.8.3、Kay Framework2.0です。

Kay Frameworkでのモデルは、GAEのdbモジュールをそのまま利用しているので、第5回 で解説した利用方法とほとんど変わりません。モデルの定義は、models.pyに行います。

今回はツイートの情報を扱うモデルを定義しています。投稿時間に関しては、DateTimePropertyという日時を扱える便利なプロパティ型があるので、それを利用しましょう。また、ツイートが内容はStringPropertyですが、ツイートに改行が入っていることがあるので、multilineをTrueにしています。

# -*- coding: utf-8 -*-
from google.appengine.ext import db
class Tweet(db.Model):
 id = db.IntegerProperty(required=True) # id
 screen_name = db.StringProperty(required=True) # ユーザのアカウント名
 name = db.StringProperty(required=True) # ユーザ名
 time = db.DateTimeProperty(required=True) # 投稿時間
 text = db.StringProperty(required=True, multiline=True) # ツイート内容

前回、views.pyに、ホーム画面のタイムラインを取得するコードを書きました。今回は、それをデータストアに格納してみましょう。モデルへの格納はput()でしたね。

from kay.utils import render_to_response
from client.models import Tweet
import twitter
.....
 tweet_list.append(tweet_info)
 Tweet(id=id, screen_name=screen_name, name=name, time=time, text=text).put()
 return render_to_response('client/index.html', {'tweet_list': tweet_list})

これでアプリケーションを起動すると、ツイート情報がデータストアに格納されます!データストアの中身は、http://localhost:8080/_ah/admin から見ることができます。では、データストアに格納した情報を利用して、各ツイートごとのページ(詳細ページ)を作ってみます!

現在、 http://localhost:8080 にタイムラインが表示されていますが、各ツイートの時間の部分から詳細ページへのリンクをはることにします。以下がの様なイメージです。

以下、順番にファイルを編集していきます。まず1つ目はurls.pyというファイルです。このファイルでは、URLとviewの対応付けを行います。ここでは、詳細ページのURLを http://localhost:8080/detail/<id>  とし、viewの関数名をdetailにします。 (<id>には格納したツイートのidが入ります)以下のように、urls.pyのViewGroup()に、以下の行を追加して下さい。

Rule('/detail/<int:id>', endpoint='detail', view='client.views.detail'),

たったこれだけです。これでURLとviewが対応付けられたので、今度はviews.pyの関数detailを定義しましょう。指定されたidのツイートを取ってきて、その情報をtemplates/detail.htmlに渡しましょう。

def show_detail(request, id):
 # filterでidを指定し、指定されたツイート情報を取得
 tweet = Tweet.all().filter('id =', id).get()
 return render_to_response('client/detail.html',
 {'tweet': tweet})

templates/detail.htmlを編集は、前回と同じ要領です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
...
<body>
{{ tweet.screen_name }}<br>
{{ tweet.name }}<br>
{{ tweet.time }}<br>
{{ tweet.text }}<br><br>
</body>
</html>

最後に、index.html(タイムラインのページ)から、詳細ページへのリンクをはります。時間を表示させている行に以下を追加しましょう。

<a href="detail/{{ tweet['id'] }}">{{ tweet['time'] }}</a><br>

これで完成です。アプリケーションを起動し、上図のようにページ遷移ができれば成功です。今回を参考に、モデルを利用してぜひおもしろい機能を追加してみて下さい!次回は、テンプレートの継承について解説し、Twitterクライアントのデザインをかえてみます。最後まで読んでいただき、ありがとうございました。次回もご期待ください。

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top