目标是将“名称”,“心情”变量和日期纳入数据存储区。尽管我多次提交网络表单,但我在Datastore看到的所有内容都是一个加密的实体密钥和访客名称 - 情绪 - 日期索引,没有数据。
这是表格
名字:
选择
好
为
展
在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")
这将数据存储在Datastore中!现在,我唯一需要修复的是获取表单响应以在原始表单页面上打印(index.py),在正确的div中,我在表单旁边浮动。相反,表单提交的响应出现在另一个未格式化的页面上。我已经使用了self.redirect和以下内容,但我需要一些指导如何实现这一点,或者即使我是正确的路径,要获得表单响应以在表单页面上打印,而不是在不同的页面上:< / p>
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)
答案 0 :(得分:1)
看起来你没有创建任何实体来put()
。试试这个开头:
class Post(webapp.RequestHandler):
def post(self):
visitor_db = Visitor()
visitor_db.name = self.request.get("name")
visitor_db.mood = self.request.get("mood")
visitor_db.put()
上面的代码将创建一个新条目并存储它。
我更新了我的答案,如果您使用表单提交数据,那么您应该将get(self)
更改为post(self)
,因为浏览器在提交表单时请求POST
请求。
答案 1 :(得分:0)
看起来你有正确的想法,但你应该调试ApplyHandler.post(),很可能你的问题就在那里。您可能缺少请求中的发布数据,并且可能使用一堆None数据初始化newuser对象。