Google App Engine のデータストア機能を使って、学名を保存

Airbus A320 のエンジン

 Google App Engine のチュートリアルを元にデータストア機能を試してみた。非常に簡単で分かりやすい。まだ、ソースコードの中にhtmlを記述しているような状態なので、テンプレートの利用やCSSの修飾を試してみよう。

 下の画面は開発環境での実行画面。まだデータの更新・削除、上位の分類、写真との連携をなど検討事項は多いがボチボチと機能を追加していこう。




#!/usr/bin/env python
#
# Copyright OpenCage.
#
# Taxonomy datastore.
#

import wsgiref.handlers
import cgi
import datetime

from google.appengine.ext import webapp
from google.appengine.ext import db

class Taxonomy(db.Model):
genus = db.StringProperty()
species = db.StringProperty()
authar = db.StringProperty()
jpname = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)

class MainHandler(webapp.RequestHandler):

# taxon を Taxoクラスに post してデータを保存。
def get(self):
self.response.out.write("""
<html>
<head>
<title>Taxonomy Datastore</title>
</head>
<body>
<form method='post' action='/taxo'>
<input name='genus' type='text' value='genus' />
<input name='species' type='text' value='species' />
<input name='authar' type='text' value='authar' />
<input name='jpname' type='text' value='jpname' />
<input name='submit' type='submit' value='Store this' />
</form>""")

# データの取り出し
taxolist = db.GqlQuery("SELECT * "
"FROM Taxonomy "
"ORDER BY genus, species")

for taxonomy in taxolist:
spname = str(taxonomy.genus) + " " + str(taxonomy.species)

# カラムの値を効率的に連結する方法がまだ分からないので、
# チュートリアルと同じことを3回繰り返して、一行を生成。
self.response.out.write('<p><i lang="ra">%s</i>' %
cgi.escape(spname)
)

self.response.out.write(' <small>%s</small>' %
cgi.escape(taxonomy.authar)
)

self.response.out.write(' <span lang="ja">%s</span></p>' %
cgi.escape(taxonomy.jpname)
)

self.response.out.write("""
</body>
</html>
""")

# MainHandler クラスから post されたデータを保存

class Taxo(webapp.RequestHandler):

def post(self):
taxonomy = Taxonomy()

taxonomy.genus = self.request.get('genus')
taxonomy.species = self.request.get('species')
taxonomy.authar = self.request.get('authar')
taxonomy.jpname = self.request.get('jpname')
taxonomy.put()
self.redirect('/')

# class を URI に変換
application = webapp.WSGIApplication([
('/', MainHandler),
('/taxo', Taxo)
], debug=True)

def main():
wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
main()
</code>

コメント

このブログの人気の投稿

何故MSはOffice Document Imaging を捨てたのか、、、

2才5ヶ月の息子の絵が上手すぎる!

蘇民将来子孫家門の注連縄

url に日本語が含まれている場合の Firefox と IE の挙動の違い。

ヤマモガシ(山茂樫、Helicia cochinchinensis Lour.)の大木 三重県鳥羽市相差(おおさつ)

Technorati Weblog: Welcome to our new Public Beta!

ベジタリアンを軽んじたらアカン

モールミラガイ(カードチリ)

インド料理の食べ方

クロアナバチの子育て