Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 端点原型数据存储:返回不同的类,然后返回输入类_Python_Google App Engine_Google Cloud Endpoints_Endpoints Proto Datastore - Fatal编程技术网

Python 端点原型数据存储:返回不同的类,然后返回输入类

Python 端点原型数据存储:返回不同的类,然后返回输入类,python,google-app-engine,google-cloud-endpoints,endpoints-proto-datastore,Python,Google App Engine,Google Cloud Endpoints,Endpoints Proto Datastore,我希望有一个端点,它获取特定类型的对象并返回不同类型的对象,而不是让它们具有相同的类型 例如: class SomeClass(EndpointsModel): name = ndb.StringProperty() class OtherClass(EndpointsModel): otherName = ndb.StringProperty() @SomeClass.method(path='mymodel', http_method='POST', name='mymo

我希望有一个端点,它获取特定类型的对象并返回不同类型的对象,而不是让它们具有相同的类型

例如:

class SomeClass(EndpointsModel):
    name = ndb.StringProperty()

class OtherClass(EndpointsModel):
    otherName = ndb.StringProperty()

@SomeClass.method(path='mymodel', http_method='POST', name='mymodel.insert')
def MyModelInsert(self, my_model):
    my_model.put()
    otherModel = OtherClass(otherName='someothername')
    return otherModel
目前我得到:

ServerError (Method MyApi.MyModelInsert expected response type <class '.SomeClass'>, sent <class '.OtherClass'>)
ServerError(方法MyApi.mymodelsert预期响应类型,已发送)

有没有办法使输入类与返回类不同

您可以在方法装饰器中提供
response\u message
参数,但该参数必须是ProtoRPC消息类,而不是EndpointsModel

您可以通过
ProtoModel
classmethod从EndpointsModel获取消息类

而且您必须从方法返回ProtoRPC消息,而不是EndpointsModel,因为库不会自动为自定义响应类进行对话。您可以使用模型的
ToMessage
方法执行此操作

总结一下,您将有以下代码(未测试):

@SomeClass.method(path='mymodel',
                  http_method='POST',
                  name='mymodel.insert'
                  response_message=OtherClass.ProtoModel())
def MyModelInsert(self, my_model):
    my_model.put()
    otherModel = OtherClass(otherName='someothername')
    return otherModel.ToMessage()