-1

我试图查看post函数中的用户名变量是否与accountsArchive实体中的用户名相匹配。请求此实体的正确方法是什么? Python和GQL

我认为问题在于user.username不是引用用户名实体的正确方法。此外,上面的查询可能有问题。查看两个用户名是否匹配的正确方法是什么?

的Python

class accountsArchive(db.Model): 
    # The username entity 
    username = db.StringProperty(required = True) 
    password = db.TextProperty(required = True) 
    email = db.StringProperty(required = True) 
    dateJoined = db.DateTimeProperty(auto_now_add = True) 

class loginPage(Handler): 
    def post(self): 
     # The username variable 
     username = self.request.get("username") 
     password = self.request.get("password") 

     # The query 
     user = db.GqlQuery("SELECT * FROM accountsArchive WHERE  
          user.username = :name", name=username) 

     # This is how I tried to check if the two usernames matched 
     if username == user.username: 
      # Do stuff 
+0

对于任何人来说,都有太多的代码需要通过。 –

+0

谢谢!我将在未来的问题中记住这一点。 –

回答

1

你有很多的代码中的问题。

首先

user = db.GqlQuery("SELECT * FROM accountsArchive WHERE  
         user.username = :name", name=username) 

是不正确 - 你应该回去重读文档https://cloud.google.com/appengine/docs/python/datastore/gqlreference?hl=en

这个查询应该是

user = db.GqlQuery("SELECT * FROM accountsArchive WHERE  
         username = :name", name=username) 

下一步。

这行代码的结果是GqlQuery类的一个实例,而不是用户或者您可能期望的用户列表。请参阅https://cloud.google.com/appengine/docs/python/datastore/gqlqueryclass?hl=en

您现在必须获取结果和/或遍历它们。

例如

for u in user.run(): 
    if u.username == username: 
     # then do something 

但是你有问题。这没有什么会限制系统单一的唯一用户。所以如果你有多个用户使用相同的用户名,你会怎么做。

有些意见。

您可以使用用户名作为accountsArchive的关键字,这意味着您只需使用get而不是查询。

其次,如果您是新开发的appengine并且没有现有的代码库,请使用ndb代替。

+0

以前不知道.run()。谢谢! –

相关问题