1

我正在定义一个对用户进行建模的端点,如下所示。我可以通过 id 查询用户。但是插入用户时如何获取该ID?我的客户端是用 java 编写的,但我想知道如何使用 python 以及生成的 java 客户端库来检索 id。

from google.appengine.ext import endpoints
from google.appengine.ext import ndb 
from protorpc import remote
from endpoints_proto_datastore.ndb import EndpointsModel

class User(EndpointsModel):
    email = ndb.StringProperty(required=True)
    phone_number = ndb.StringProperty()
    reg_id = ndb.StringProperty()
    created = ndb.DateTimeProperty(auto_now_add=True)

@endpoints.api(name='whereareyoudroid', 
               version='v1', description='Where Are You Users')
class UserApi(remote.Service):

    @User.method(name='user.insert', path='user')
    def insert(self, user):
        user.put()
        return user

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

1 回答 1

4

首先,回答你的问题:

默认情况下,请求和响应的消息模式将是模型上的字段:emailphone_numberreg_idcreated。正如在简单的 get 示例中所做的那样,您可以将此默认值更改为包含idvia

class User(EndpointsModel):
    _message_fields_schema = ('id', 'email', 'phone_number', 
                              'reg_id', 'created')
    email = ndb.StringProperty(required=True)
    ...

或通过在以下指定您想要返回的响应字段insert method

    @User.method(response_fields=('id', 'email', 'phone_number', 
                                  'reg_id', 'created'),
                 name='user.insert', path='user')
    def insert(self, user):
        user.put()
        return user

其次,您有一个错字/错误get

该语句if not User.from_datastore:将检查类User.from_datastore上的属性对象User是否是“真实的”,它是。您想要用户对象上此属性的实际值:user.from_datastore

于 2013-03-19T20:06:26.923 回答