Return 来自 Python 中 Cloud Endpoint 的数据存储实体
Return Datastore Entity from Cloud Endpoint in Python
有没有办法 return 数据存储实体,使其成为 python 中云端点 api 实现中 request/response 消息的一部分?
例如:
我的实体模型定义如下
class District(ndb.Model):
code = ndb.StringProperty(required=True)
现在我想在 python 中实施云 api 作为
@endpoints.method(request_message=DistrictMessage, response_message=DistrictMessage, name="DistrictApi.get_by_code")
def get_by_code(self, request):
#get code from District object in request message and
#try to get entity based on it from datastore
其中 DistrictMessage 定义为
class DistrictMessage(messages.Message):
district = messages.MessageField(District, 1, required=False)
以上不起作用,因为学区不是 messages.Message,而是 ndb.Model。我们可以在 GAE Java 中做类似的事情,但我无法在 python 中找到它。有可能吗?或者我是否必须为每个实体定义一个消息 class 并进行 to/from 映射?
谢谢,
里兹塔克
无法直接执行此操作。您可以查看 http://endpoints-proto-datastore.appspot.com/ 补充库,让您使用模型而不是消息。
如果你想自己做,你将不得不做这样的事情。
class DistrictMessage(messages.Message):
code = messages.StringField(1, required=True)
class SomeApiClass(): # incomplete class def for syntax highlighting
@endpoints.method(request_message=DistrictMessage, response_message=DistrictMessage, name="DistrictApi.get_by_code")
def get_by_code(self, request):
# get code from District object in request message and
# try to get entity based on it from datastore
district = District.query(District.code == request.code).get()
if district:
# copy District properties to DistrictMessage kwargs
# ndb.Model.to_dict() can be used here if you filter
# out properties that aren't used in the DistrictMessage
return DistrictMessage(code=district.code)
raise endpoints.NotFoundException()
有没有办法 return 数据存储实体,使其成为 python 中云端点 api 实现中 request/response 消息的一部分?
例如:
我的实体模型定义如下
class District(ndb.Model):
code = ndb.StringProperty(required=True)
现在我想在 python 中实施云 api 作为
@endpoints.method(request_message=DistrictMessage, response_message=DistrictMessage, name="DistrictApi.get_by_code")
def get_by_code(self, request):
#get code from District object in request message and
#try to get entity based on it from datastore
其中 DistrictMessage 定义为
class DistrictMessage(messages.Message):
district = messages.MessageField(District, 1, required=False)
以上不起作用,因为学区不是 messages.Message,而是 ndb.Model。我们可以在 GAE Java 中做类似的事情,但我无法在 python 中找到它。有可能吗?或者我是否必须为每个实体定义一个消息 class 并进行 to/from 映射?
谢谢, 里兹塔克
无法直接执行此操作。您可以查看 http://endpoints-proto-datastore.appspot.com/ 补充库,让您使用模型而不是消息。
如果你想自己做,你将不得不做这样的事情。
class DistrictMessage(messages.Message):
code = messages.StringField(1, required=True)
class SomeApiClass(): # incomplete class def for syntax highlighting
@endpoints.method(request_message=DistrictMessage, response_message=DistrictMessage, name="DistrictApi.get_by_code")
def get_by_code(self, request):
# get code from District object in request message and
# try to get entity based on it from datastore
district = District.query(District.code == request.code).get()
if district:
# copy District properties to DistrictMessage kwargs
# ndb.Model.to_dict() can be used here if you filter
# out properties that aren't used in the DistrictMessage
return DistrictMessage(code=district.code)
raise endpoints.NotFoundException()