1

目标是将“姓名”、“心情”变量和日期输入数据存储区。尽管我多次提交 Web 表单,但我在 Datastore 中看到的所有有价值的只是一个看起来像加密的实体密钥和没有数据的访客姓名心情日期索引。

这是表格

名:

选择

好的

坏的

公平的

在 DS Console 中运行它给了我

ameError:未定义名称“访客”

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 和以下内容,但我需要一些指导如何实现这一点,或者即使我是正确的路径,也要让表单响应打印在表单页面上,而不是在不同的页面上:

创建的处理程序

    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)
4

2 回答 2

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在表单提交时请求请求。

于 2012-06-12T22:03:14.890 回答
0

看起来你有正确的想法,但你应该调试 ApplyHandler.post(),很可能你的问题就在那里。您可能会丢失请求中的 post 数据,并且 newuser 对象可能会使用一堆 None 数据进行初始化。

于 2012-06-12T19:06:52.213 回答