我试图查看post函数中的username变量是否与accountsArchive实体中的用户名匹配。
我认为问题在于user.username不是引用用户名实体的正确方法。此外,上面的查询可能有问题。查看两个用户名是否匹配的正确方法是什么?
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 :(得分: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
但是你有问题。这里没有任何内容可以限制系统的唯一用户。因此,如果您使用相同的用户名获得多个用户,那么您将做什么。
一些评论。
您可以使用username作为accountsArchive的密钥,这意味着您只需使用get而不是查询。
其次,如果您不熟悉appengine并且没有现有的代码基础,请先使用ndb开始。