目標は、「名前」、「気分」変数、および日付をデータストアに取り込むことです。データストアで価値があると思うのは、Webフォームを数回送信したにもかかわらず、データのない暗号のように見えるエンティティキーとVisitor-name-mood-dateインデックスだけです。
これがフォームです
ファーストネーム:
選択する
良い
悪い
公平
これをDSコンソールで実行すると
ameError:名前'visitor'が定義されていません
q = Visitor.all()
q = db.GqlQuery("SELECT * FROM Visitor") #in DS Console
results = q.fetch(2)
for p in results:
print "%s" % (p.name)
#DATASTORE v v
class Visitor(db.Model): # index.py
name = db.StringProperty()
mood = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)
class Post(webapp.RequestHandler): #yaris
def get(self):
visitor_db = Visitor()
visitor_db.name = self.request.get("name")
visitor_db.mood = self.request.get("mood")
visitor_db.put()
およびindex.yaml:
indexes: # seems like this is OK
- kind: Visitor
properties:
- name: name
- name: mood
- name: date
direction: asc
また、フォームの送信時にターミナルで405エラーが発生します。
編集:これを次のように機能させました。手伝ってくれてありがとう。
class MainPage(webapp.RequestHandler):
def get(self):
self.response.out.write("""<html><body>
<form action="/" method="post">
# form is here
</body></html> """)
name = self.request.get("name")
name = name.capitalize()
mood = self.request.get("mood")
localtime = time.localtime(time.time())
mon = localtime[1] # MONTH
h = localtime[3] # HOUR
# if/elif statements with %s specifiers follow...still in MainPage class v v
> def post(self):
> name = self.request.get("name")
> name = name.capitalize()
> mood = self.request.get("mood")
> info = Visitor(name = name, mood = mood)
> info.put()
> self.redirect("/index.py")
これにより、データストアにデータが保存されます。今、私が修正する必要がある唯一のことは、フォームの応答を取得して、フォームのすぐ隣にある適切なdivの元のフォームページ(index.py)に印刷することです。代わりに、フォームから送信された応答は、フォーマットされていない別のページに表示されます。私はself.redirectと次の機能を試しましたが、これを実装する方法、または正しいパスであっても、フォームの応答を別のページではなくフォームページに印刷するための指示が必要です。
作成されたハンドラー
redirectionHandler = urllib2.HTTPRedirectHandler()
# 2 apply the handler to an opener
opener = urllib2.build_opener(redirectionHandler)
# 3. Install the openers
urllib2.install_opener(opener)
request = urllib2.Request("http://*my url*", #commented out data=urllib.urlencode({'key':'value'}))
response = urllib2.urlopen(request)