【问题标题】:GAE: Can't use imported class with Endpoints API methodGAE:不能将导入的类与 Endpoints API 方法一起使用
【发布时间】:2016-05-15 22:46:27
【问题描述】:

我有一个包含写入数据存储区的方法的类。我可以使用它从我的网络写入我的数据存储区,但我不知道如何将它用于我的 API POST。

DatastoreWrite.py:

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

def person_timestamp_key(person_timestamp):
return ndb.Key('Person Timestamp', person_timestamp)

class Person(EndpointsModel):
    name = ndb.StringProperty(indexed=False)
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

def do_insert(self, name):
    person_timestamp = 'person_timestamp'
    # Sets entity
    person = Person(parent=person_timestamp_key(person_timestamp))

    person.name = name

    person.put()

webapp.py - 当从 webapp 提交时,这成功地将一个条目添加到我的数据存储中:

def post(self):

    name = self.request.get('name')

    person = DatastoreWrite.Person()

    if name and not name.isspace():
        person.do_insert(name)

        self.redirect('/')

api.py - 我在这里尝试了一百种不同的东西。这就是我目前所拥有的。结果“BadValueError: Expected string, got Person()”:

class Api(remote.Service):

  @Person.method(path='api', http_method='POST', name='person.insert')
  def PersonInsert(self, person):

      person = DatastoreWrite.Person()

      person.do_insert(person)

      return person

更新:另一次尝试 - 失败并出现错误“BadValueError: Expected string, got Person(name=u'Atlas')”:

@DatastoreWrite.Person.method(path='healthsecure', http_method='POST', name='person.insert')
  def PersonInsert(self, name):

      person = DatastoreWrite.Person()

      person.do_insert(name)

      return person

【问题讨论】:

    标签: python google-app-engine google-cloud-endpoints google-app-engine-python


    【解决方案1】:

    do_insert 函数有一个签名def do_insert(self, name),它需要名称作为参数,它是一个字符串,并且您发送人员作为参数person.do_insert(person)

    解决办法:

    @DatastoreWrite.Person.method(path='healthsecure', http_method='POST', name='person.insert')
    def PersonInsert(self, person):
    
      person.do_insert(person.name)
    
      return person
    

    【讨论】:

    • 感谢您解释错误。我再次尝试传递名称(上面的更新),但它也不起作用。您能否就如何在此处正确调用 do_insert 方法提出建议?
    • 在 endpoints_proto_datastore 中,传入的请求消息始终是它作为方法的模型类,在您的情况下是 Person。我已经更新了答案可能是什么解决方案。
    • 做到了。太感谢了!我花了 2 天时间试图弄清楚这一点。
    • 很高兴能帮上忙 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多