案内葉書データを入力するページを作る
ページを作成するのは、なんと言うかセンスが無いし大変なので、よそから頂戴することにした
http://www.phpform.org/
入力ページはloginしないと作成できない様にapp.yamlファイルに設定を記述する
- url: /inputpage新規作成する場合と、既存のデータを編集する場合があるので、httpリクエストのクエリとしてkey=xxxを処理するようにした
login: required
script: forlune.py
class InputPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
key = self.request.get('key')
if key:
entity = db.get(key)
else:
entity = PostCard( \
date_s = datetime.date.today() + datetime.timedelta(hours=9), \
date_e = datetime.date.today() + datetime.timedelta(hours=9,days=1), \
opentime = datetime.time(hour=10,minute=0,second=0), \
closetime = datetime.time(hour=18,minute=0,second=0) \
)
members = ",".join(entity.members)
images = ",".join(entity.images)
template_values = {
'key' : key,
'members': members,
'images' : images,
'entity' : entity
}
path = os.path.join(os.path.dirname(__file__),'input.html')
self.response.out.write(template.render(path,template_values))
members,imagesはStringListPropertyなので、連結して単一の文字列オブジェクトにしておいた
template内でfor文を使って処理することもできるけど、このほうがスッキリする?
入力フォームページはtemlateとして使用するので初期値をvalue="{{ entity.title|default:"" }}"のように書き換えておく
入力したフォームを処理するcgiとしてformタグにaction="/postcard"としておく
アプリ側でPOSTされたデータを識別するためにフォームにkeyデータを埋め込んでおく
<input type="hidden" name="key" value="{{key}}" />
これで、アプリは
key = self.request.get('key')
if key:
postcard = db.get(key)
else:
postcard = PostCard()
の様に新規作成されたデータか、既存のデータを編集したのかを判断できる
後は、Postされたフォームのデータをひたすら拾ってデータベースにputする
class PutCard(webapp.RequestHandler):
def post(self):
key = self.request.get('key')
if key:
postcard = db.get(key)
else:
postcard = PostCard()
postcard.images = self.request.get('images').rsplit(',')
postcard.title = self.request.get('title_name')
postcard.place = self.request.get('place')
postcard.address = self.request.get('address')
postcard.zip = self.request.get('zip')
db.put(postcard)
self.redirect('/?kind=all')
最後にルートにリダイレクトして終わり
これで、とりあえず使えるページが出来た。
ただ、見栄えとか良くしたり、早見表みたいなのをつけたりしたい
0 件のコメント:
コメントを投稿