1

我正在尝试列出在我的测试 GAE 应用程序中输入我的数据存储区的所有用户,并打印出每个用户的用户名。但是,当我运行下面的代码时,我收到一条错误消息

self.query = User.all() AttributeError: type object 'User' 没有属性 'all'

我认为这self.query = User.all()会返回我数据库中的所有用户?

我的代码如下。提前致谢!

PS。我知道我的用户查找器表单正在询问用户名并且什么都不做,但是过滤是以后的任务 - 我只是想确保我已经先完成了基本查询。

from google.appengine.ext import ndb

import webapp2
import uuid

class User(ndb.Model):
    db_UID = ndb.StringProperty(indexed = True)
    db_username = ndb.StringProperty(indexed = True)
    db_password = ndb.StringProperty(indexed = True)
    db_email = ndb.StringProperty(indexed = True)
    db_resetID = ndb.StringProperty(indexed = True)


class UsersPage(webapp2.RequestHandler):
    def get(self):
    self.response.write('<html><body><h1>User Info Page</h1>')
    self.response.write("""
        <form method = "post">
        Username: <input type = "textarea" name = "user_username"></input><br>
        Password: <input type = "textarea" name = "user_password"></input><br>
        Email address: <input type = "textarea" name = "user_email"></input><br>
        <input type = "submit"></input>
        </form>""")
    self.response.write('</body></html>')

def post(self):
    UNIQUE_ID_STRING = str(uuid.uuid1())
    self.user = User(db_UID = UNIQUE_ID_STRING ,
        db_username = self.request.get('user_username'), 
        db_password = self.request.get('user_password'),
        db_email = self.request.get('user_email'))
    self.user.put()
    self.redirect('/user')



class UserFinder(webapp2.RequestHandler):
def get(self):
    self.response.write('<html><body><h1>Search username</h1>')
    self.response.write("""
        <form method = "post">
        Username: <input type = "textarea" name = "user_username"></input><br>
        <input type = "submit"></input>
        </form>""")
    self.response.write('</body></html>')

def post(self):
    self.query = User.all()
    self.response.write('<html><body><h1>Search username</h1>')

    for self.user in self.query:
        self.response.write('<p>%s</p>' % self.User.db_username)

    self.response.write('</body></html>')


application = webapp2.WSGIApplication([
('/user', UsersPage),
('/userfinder', UserFinder),
], debug = True)
4

1 回答 1

4

与基本的 'db' 版本不同,NDB 模型不all()用于查询,它们使用query(),所以

self.query = User.query()

关于查询的NDB 文档可能很有用。

顺便说一句,self尽可能多地使用有点不寻常。除了调用 toself.response.write和 to之外self.redirect,仅使用局部变量会少很多混乱(如果您必须发布更多问题,那就太好了!),并且可以节省您的打字时间。所以你的 post 方法会变成:

query = User.all()
self.response.write('<html><body><h1>Search username</h1>')

for user in query:
  self.response.write('<p>%s</p>' % user.db_username)

self.response.write('</body></html>')
于 2013-06-24T16:53:48.443 回答