我正在定义一个为用户建模的端点,如下所示。我可以通过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
答案 0 :(得分:4)
默认情况下,您的请求和响应的消息架构将是您模型上的字段:email
,phone_number
,reg_id
和created
。与simple get sample中所做的一样,您可以通过
id
class User(EndpointsModel):
_message_fields_schema = ('id', 'email', 'phone_number',
'reg_id', 'created')
email = ndb.StringProperty(required=True)
...
或指定要在insert method
中返回的response fields:
@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
属性对象是否为“truthy”,它是什么。您希望在用户对象上使用此属性的实际值:user.from_datastore
。