夜ご飯食べて落ち着いたら掲示板を作る予定。

予定は未定。とりあえず掲示板とか、この発想力にゲンナリ。

guestbook作りました

何とgoogleのサンプルコードはGuestbookを作りましょうでした。APIのDatastore、Templates、Usersを段階的に使っていくみたいです。丸真似しても面白くないので、参考にしつつ手を動かして作りました。どうせUsers Apiはアカウントが無いと使えないし、データベースだけ使ってみることに。

import cgi
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext import db

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.out.write('<html><head><title>guestbook</title></head><body><h1>GUEST BOOK!!</h1>\n')
    greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date")
    for greeting in greetings:
      self.response.out.write("<strong>Name :</strong> %s" % cgi.escape(greeting.author))
      self.response.out.write("<pre>%s</pre>\n<hr>" % cgi.escape(greeting.content))

    self.response.out.write("""
          <form action="/sign" method="post">
            <div>NAME: <input type="text" name="author"></div>
            <div><textarea name="content" rows="5" cols="60"></textarea></div>
            <div><input type="submit" value="write"></div>
          </form></body></html>""")

class Greeting(db.Model):
  author = db.StringProperty(multiline=False)
  content = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)

class Guestbook(webapp.RequestHandler):
  def post(self):
    author = self.request.get('author')
    content = self.request.get('content')
    if author != '' and content != '': 
      greeting = Greeting()
      greeting.author = author
      greeting.content = content
      greeting.put()
    self.redirect('/')

def main():
  application = webapp.WSGIApplication(
                                       [('/', MainPage),
                                        ('/sign', Guestbook)],
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

おなじみの「app.yaml」を作って /usr/local/bin/dev_appserver.py -c ./guestbook で起動。-cでデータベースを初期化してます。

試行錯誤しながら1時間くらいで書きました。重要な部分はサンプル通りだけど、やはり手を動かすのは重要だね。生まれて初めて使ったpythonの感じがつかめたし。インデントとか気持ち悪いけどpython面白いです。(こうやってgoogleの罠にハマっていく俺)