Google App Engine:删除“任意”实体的处理程序

时间:2014-02-10 19:29:21

标签: python google-app-engine app-engine-ndb webapp2

我的实体目前可以使用路径/12345查看,其中12345代表其entity ID

我想创建一个使用/12345/delete删除任何实体的处理程序。

处理程序看起来像这样:

class DeleteHandler(BaseHandler):
    def get(self, entity_id):
       # cannot retrieve entity using just entity_id
       # We cannot use KIND.get_by_id(entity_id), since 'entity kind' is unknown

我们如何使用url获取实体类型,以便我们可以使用get_by_id()检索实体,然后将其删除?

我接近这个吗?或者有更好的方法吗?

3 个答案:

答案 0 :(得分:1)

实体ID在各种类型中并不是唯一的,所以我真的不知道你期望它如何工作。

然而,完整密钥的网络安全编码版本确实提供了足够的信息来唯一地标识实体。然后,您可以使用它来实例化密钥,并且可以在该密钥上调用delete。

答案 1 :(得分:0)

感觉不对。

我会简单地使用kind/12345/delete

要回答您的问题,一种方法可能是白名单。

设置您希望此操作删除其对象(实体)的kinds(类)的某处。

假设你有这些种类:

class Foo(ndb.Expando):
  pass


class Boo(ndb.Expando):
  pass


class Bar(ndb.Expando):
  pass

现在你有了id:

kinds_to_delete = ['Foo', 'Boo', 'Bar']
for kind_to_delete in kinds_to_delete:
  ndb.Key(kind_to_delete, entity_id).delete()

或者作为一个肮脏的oneliner:

[ndb.Key(kind, entity_id).delete() for kind in ['Foo', 'Boo', 'Bar']]

答案 2 :(得分:0)

/<key>/delete 

如果你传递了密钥的base64表示

,也许会更容易