参考:
http://d.hatena.ne.jp/kinneko/20080409/p5
http://webpy.appspot.com/source
http://code.google.com/intl/ja/appengine/docs/python/datastore/creatinggettinganddeletingdata.html
main.py
import web
import datetime
from google.appengine.ext import db
urls = (
'/', 'index',
'/add', 'add',
'/update', 'update',
'/delete', 'delete',
)
render = web.template.render('templates/')
class Todo(db.Model):
body = db.StringProperty(required=True)
create_date = db.DateTimeProperty()
update_date = db.DateTimeProperty()
class index:
def GET(self):
todoes = Todo.all()
return render.index(todoes)
class add:
def POST(self):
i = web.input("body")
todo = Todo(body=i.body)
todo.create_date = datetime.datetime.now()
todo.update_date = datetime.datetime.now()
todo.put()
web.seeother("/")
class update:
def POST(self):
i = web.input()
todo = Todo.get(i.key)
todo.body = i.body
todo.update_date = datetime.datetime.now()
todo.put()
web.seeother("/")
class delete:
def POST(self):
i = web.input('key')
q = Todo.get(i.key)
#q = Todo.get('agl3ZWJweXRvZG9yCgsSBFRvZG8YBgw')
q.delete()
web.seeother("/")
if __name__ == '__main__':
app = web.application(urls, globals())
main = app.cgirun()
app.yaml
application: webpytodo
version: 2
runtime: python
api_version: 1
handlers:
- url: .*
script: main.py
こちらで動作確認できます。
http://webpytodo.appspot.com/
以下気づいたこと
・当然かもしれんが、web.pyのモジュールをappengineに含めないといけない。
・web.py 0.3ではcgirun()にappengine用のコードが含まれているので
アプリ側で特別な設定は必要ないみたい。
def cgirun(self, *middleware):
"""
Return a CGI handler. This is mostly useful with Google App Engine.
There you can just do:
main = app.cgirun()
"""
wsgiapp = self.wsgifunc(*middleware)
try:
from google.appengine.ext.webapp.util import run_wsgi_app
return run_wsgi_app(wsgiapp)
except ImportError:
# we're not running from within Google App Engine
return wsgiref.handlers.CGIHandler().run(wsgiapp)
・そのまま実行すると
render = web.template.render('templates/')
でエラーになるので、
python web/template.py --compile templates/
を実行して、appengine用に変換する必要があるらしい
http://webpy.org/cookbook/templates_on_gae
0 件のコメント:
コメントを投稿