Google App Engine(python):根据自定义字段过滤用户

时间:2012-06-06 11:55:43

标签: google-app-engine filter

我正在使用基本扩展webapp2_extras.appengine.auth.models.User的{​​{1}}服务。现在,我有自己的应用程序注册的自定义用户,他们有很多自定义字段。问题是我想使用各种自定义字段过滤/(多重过滤)所有用户。例如:

用户模型有2个字段google.appengine.api.users modelis_active现在我想使用这些字段过滤它们,例如:

activation_key

使用自定义字段过滤用户模型的最佳方法是什么?

编辑:

还尝试了以下内容:

from google.appengine.api import users

act_key = 'hw-2j38he63u83hd6hak3FshSqj3TGemn9'
user = users.all().filter('is_active =', False).filter('activation_key =', act_key).get()
if user:
  return True
else:
  return False

但是这会产生如下错误:

from webapp2_extras.appengine.auth.models import User

query = User.query().filter('is_active =', False)
print query

3 个答案:

答案 0 :(得分:6)

在NDB中查询Expando属性的语法与在旧的DB API中完成的方式略有不同,并记录在案here。您的查询需要看起来像这样:

user = users.all().filter(ndb.GenericProperty('is_active') == False, ndb.GenericProperty('activation_key) == act_key).get()

答案 1 :(得分:1)

是使用db包或ndb

实施的自定义用户模型

对于第一个问题,如果您只需要检查用户是否存在,您可以进行keys_only查询.all(keys_only=True).filter(...

使用webapp2查询时遇到的错误用户模型取决于ndb包。使用ndb,查询的正确语法是:

User.query().filter(User.is_active == False) 

User.query(User.is_active == False)

当然,您需要查询自定义用户模型。

答案 2 :(得分:1)

webapp2_extras.appengine.auth.models.User是具有createdupdatedauth_idspassword属性的Expando模型。除此之外的所有内容或自定义属性都将存储为不透明的blob,即不会被编入索引。也就是说,人们无法查询/过滤它们。

你可以继承User模型并添加你需要的属性或(更好)创建一个新模型(比如Account)。

这是处理数据存储区以保持模型尽可能小的一个好习惯,这就是为什么:考虑一个具有许多属性的模型,每次获取一个实体,你需要获取它们全部;网络在这里不是问题,那就是protobuf解码,而Python并不擅长它。