2013-06-24 175 views
1

我想列出在我的測試GAE應用程序中輸入到我的數據存儲中的所有用戶,並列出每個用戶的用戶名。然而,當我運行下面的代碼,我得到一個錯誤說GAE數據存儲查詢

self.query = User.all() AttributeError: type object 'User' has no attribute '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

不同於基本 'DB' 的版本,NDB模型不用於查詢使用all(),他們使用query(),所以

self.query = User.query() 

NDB docs on queries可能是有用的。

另外,儘量使用self有點不尋常;除了調用self.response.writeself.redirect之外,僅僅使用局部變量將會減少很多混淆(如果您需要發佈更多的問題,這樣做會更好!),並且可以節省您的輸入時間。 因此,您的發佈方法將變爲:

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>') 
+0

非常感謝@Greg這樣一個清晰而有用的答案!我使用了一個教程來編寫查詢,他們在自己的代碼中使用了自我,所以我從它那裏拿了它,因爲我認爲這是必要的。我會把它們拿出來。 我已經修改我的post方法到下面的代碼,但我現在得到一個錯誤,說 查詢= User.query() UnboundLocalError:本地變量'用戶'在賦值之前引用。 我認爲查詢是在User類上作用的? 我的代碼是現在: – user2463758

+0

DEF後(個體經營): 查詢= User.query() self.response.write( '

搜索用戶名

') 用戶查詢: self.response的。寫( '

%S

'%User.db_username) self.response.write('') – user2463758

+0

嘗試重命名你的變量 '用戶' - 它可能與用戶類衝突。 – Greg