1

我试图制作一种方法,允许我通过用户电子邮件查询终端。有没有更好的方法来做到这一点,然后我在下面做什么?也许只返回一个或零个记录。通过电子邮件查询终端用户

@User.query_method(query_fields=('email',), 
         path='get_by_mail', 
         name='user.get_by_email') 
    def get_by_email(self, query): 
     return query 

回答

2

我假设User是从EndpointsModel继承一些自定义模式。如果没有,这将失败。换句话说,你做了这样的事情:

from google.appengine.ext import ndb 
from endpoints_proto_datastore.ndb import EndpointsModel 

class User(EndpointsModel): 
    email = ndb.StringProperty() 
    ... 

有解决这个问题的两个主要途径,你既可以使用email为重点的实体或滚你自己的查询,并尝试获取两个实体来查看你的结果是否是唯一的并且存在。

方法1:使用email为重点

而不是做一个全面的查询,你可以做一个simple get

from google.appengine.ext import endpoints 

@endpoints.api(...) 
class SomeClass(...): 

    @User.method(request_fields=('email',), 
       path='get_by_mail/{email}', 
       http_method='GET', name='user.get_by_email') 
    def get_by_email(self, user): 
     if not user.from_datastore: 
      raise endpoints.NotFoundException('User not found.') 
     return user 

使用电子邮件作为每个实体的数据存储关键,因为在custom alias properties sample完成。例如:

from endpoints_proto_datastore.ndb import EndpointsAliasProperty 

class User(EndpointsModel): 
    # remove email here, as it will be an alias property 
    ... 

    def EmailSet(self, value): 
     # Validate the value any way you like 
     self.UpdateFromKey(ndb.Key(User, value)) 

    @EndpointsAliasProperty(setter=IdSet, required=True) 
    def email(self): 
     if self.key is not None: return self.key.string_id() 

选项2:滚你自己的查询

@User.method(request_fields=('email',), 
       path='get_by_mail/{email}', 
       http_method='GET', name='user.get_by_email') 
    def get_by_email(self, user): 
     query = User.query(User.email == user.email) 
     # We fetch 2 to make sure we have 
     matched_users = query.fetch(2) 
     if len(matched_users == 0): 
      raise endpoints.NotFoundException('User not found.') 
     elif len(matched_users == 2): 
      raise endpoints.BadRequestException('User not unique.') 
     else: 
      return matched_users[0] 
+0

但是后来,我可能想找到他的电话号码的用户。我会怎么做呢? – user672009 2013-03-19 21:17:32

+0

也许我这样做完全错了。我想制作一个由用户Google帐户授权的Android应用程序,然后基本上有一个端点模型,该模型具有对该用户和电话号码的引用......建议? – user672009 2013-03-19 22:17:52

+0

答复已更新。 – bossylobster 2013-03-19 22:30:39

相关问题