数据存储表单数据插入帮助请

时间:2012-06-12 18:24:41

标签: google-app-engine google-cloud-datastore

目标是将“名称”,“心情”变量和日期纳入数据存储区。尽管我多次提交网络表单,但我在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)

2 个答案:

答案 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对象。