实体密钥的字符串表示始终具有app-id&名称空间作为前缀。但在大多数情况下,它们不是必需的,因为太明显了。
离>关键: ag13YXJjbG91ZC10ZXN0chsLEgVGb3JjZRihnAEMCxIIVW5pdFNsb3QYAgw
删除appid_namespace部分后: chsLEgVGb3JjZRihnAEMCxIIVW5pdFNsb3QYAgw
我知道(种类,身份或姓名)对可以是识别唯一实体的另一种解决方案但是在这里,我只是想知道如何消除app-id&命名空间前缀并将rest作为REST API的一部分公开...
如何删除它们?
答案 0 :(得分:4)
嘿,我不确定你希望你的REST api如何工作,但如果你做了类似的事情
from google.appengine.ext import db
def getRESTPath (entity):
def addKeyPathRecursive (key):
restPaths.append('%s/%s' % (key.kind(), key.id_or_name()))
parentKey = key.parent()
if parentKey:
addKeyPathRecursive(parentKey)
restPaths = []
addKeyPathRecursive(entity.key())
return '/'.join(reversed(restPaths))
class Grandpa(db.Model): pass
class Papa(db.Model): pass
class Kid(db.Model): pass
kid = Kid(parent = Papa(parent = Grandpa().put()).put())
kid.put()
print getRESTPath(kid)
你得到一个像Grandpa/21386/Papa/21387/Kid/21388
这样的字符串。
如果你只想要(kind, id_or_name)
没有祖先路径,我不确定为什么你对'%s/%s' % (key.kind(), key.id_or_name())
不满意。您无法从数据存储区内部处理密钥的方式删除命名空间信息,但这并不意味着您必须将其显示给用户。