Twitterもどきを作りながらGoogle App Engineの肝データストアを理解する
白石俊平(あゆた)
2008-04-14 17:00:00
今回はTwitter(もどき)を作りながらGoogle App Engineを利用する最大の目的ともいえる「データストア」について説明しよう。
リスト1:builder-example3.py
import os
import wsgiref.handlers
from google.appengine.api import users
from google.appengine.ext import db,webapp
from google.appengine.ext.webapp import template
class Message(db.Model):
author = db.UserProperty()
content = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)
class MainPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if self.request.get("myMessageOnly"):
if not user:
self.redirect(users.create_login_url(self.request.uri))
return
# GQLを用いた問い合わせ
messages = db.GqlQuery("SELECT * FROM Message"
" WHERE author = :author"
" ORDER BY date DESC LIMIT 20", author=user)
else:
# Queryのメソッドを用いた問い合わせ
messages = Message.all().order("-date").fetch(20)
if not user:
login_or_out = "Log in"
url = users.create_login_url(self.request.uri)
else:
login_or_out = "Log out"
url = users.create_logout_url(self.request.uri)
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(
template.render(path, {"messages": messages,
"login_or_out": login_or_out,
"url": url}))
class AddMessage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if not user:
loginUrl = users.create_login_url(self.request.uri)
self.redirect(loginUrl)
return
else:
content = self.request.get("content")
# メッセージの保存
message = Message(author=user,
content=content)
message.put()
self.redirect("/")
def main():
application = webapp.WSGIApplication(
[('/', MainPage),
('/add', AddMessage)],
debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
リスト2:index.html (画面のテンプレート)
{{login_or_out}}
すべてのメッセージ あなたのメッセージのみ
| {{message.author}}曰く: | 「{{message.content|escape}}」 - {{message.date}} |
リスト3:app.yaml # アプリケーションの名称 application: builder-example3
# アプリケーションのバージョン version: 1 # ランタイムの名称。現時点では「python」のみ runtime: python # アプリケーションが前提としているAPIのバージョン api_version: 1 # URLと、その処理方法の定義 handlers: - url: /.* script: builder-example3.py
- ホワイトペーパー



