ホーム » Python からのデータストアの利用 - GQL » データストアへのオブジェクトの保存
データストアへのオブジェクトの保存
それではここでは簡単な掲示板を作っていきましょう。
書き込みフォームが画面上部にあり、書き込まれたメッセージが画面の下部に並ぶ・・・という形式のシンプルなものです。メッセージはデータストアに保存します。
また、全体的な枠組みとしてはここでは webapp フレームワークを用いています。 用意したテンプレートは次の通りです。webapp やテンプレートがよく分からない、と言う人は webapp フレームワークのページを見直してみてください。
<html>
<body>
<h1>webapp Simple BBS</h1>
<form action="/" method="POST">
<table border="1">
<tr>
<td>Name:</td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td>Message:</td>
<td><textarea
name="msg" id="msg"
style="width:500px;height:75px;"></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Post Message"></td>
</tr>
</table>
</form>
<table border="1" style="width:100%;">
{% for message in messages %}
<tr>
<td rowspan="2" valign="top" style="width:150px;">
{{message.name|escape}}<br>
<a href="mailto:{{message.email}}">{{message.email|escape}}</a>
</td>
<td>{{message.msg|escape}}</td>
</tr>
<tr>
<td>Posted On {{message.postedon}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
さて、これを表示する単純な枠組みに対して、書き込みメッセージを表す Message クラスを定義すると、 次のようになります。
import os
import cgi
from datetime import date
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
class Message(db.Model):
name = db.StringProperty()
email = db.StringProperty()
msg = db.StringProperty(multiline=True)
postedon = db.DateTimeProperty(auto_now_add=True)
class MyPage(webapp.RequestHandler):
def get(self):
messages = GQL を使ってデータを取得!
template_values = {
'messages': messages
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
def post(self):
ここで POST されたデータを保存!
self.redirect('/')
application = webapp.WSGIApplication([('/', MyPage)], debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
オブジェクトの取得、保存部分だけ抜いてありますが、そうすると、テンプレートを利用したときの最も単純なページ とほとんど変わらないことが分かります。
ではこの Message オブジェクトの保存部分を追加します。
場所は post メソッド内です。データを POST したときは、ここが呼び出されます。
オブジェクトを保存するには、オブジェクトを生成して、次のように put メソッドを呼び出すだけです。
def post(self):
message = Message()
message.name = self.request.get('name')
message.msg = self.request.get('msg')
message.email = self.request.get('email')
message.put()
self.redirect('/')
put メソッドで保存した後、ここでは / へリダイレクトしています。 こうすると、get メソッドが呼び出されます。
では、引き続きオブジェクトを取得する場所を書いていきます。
ホーム » Python からのデータストアの利用 - GQL » データストアへのオブジェクトの保存