gpt4 book ai didi

python - 在 GAE 中公开 "dumbed-down"模型的只读实例

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:36 26 4
gpt4 key购买 nike

有谁知道在 Google App Engine 中返回包装的 Model 实例的巧妙方法,该实例仅公开一些原始属性,并且不允许将实例保存回数据存储区?

我不是在寻找实际执行这些规则的方法,显然仍然可以通过挖掘其 __dict__ 等来更改实例。我只是想要一种避免意外暴露的方法/改变数据。

我最初的想法是这样做(我想为 User 模型的公共(public)版本这样做):

class PublicUser(db.Model):
display_name = db.StringProperty()

@classmethod
def kind(cls):
return 'User'

def put(self):
raise SomeError()

不幸的是,GAE 在早期将类型映射到一个类,所以如果我执行 PublicUser.get_by_id(1) 我实际上会得到一个 User 实例,而不是一个PublicUser 实例。

另外,这个想法是它应该至少看起来是一个模型实例,这样我就可以将它传递给不知道以下事实的代码它是一个“精简”版本。最终我想这样做,以便我可以在只读版本上使用我的通用数据公开功能,以便它们只公开有关用户的公共(public)信息。


更新

我采用了 icio 的解决方案。这是我为将属性从 User 实例复制到 PublicUser 实例而编写的代码:

class User(db.Model):
# ...
# code
# ...

def as_public(self):
"""Returns a PublicUser version of this object.

"""
props = self.properties()

pu = PublicUser()
for prop in pu.properties().values():
# Only copy properties that exist for both the PublicUser model and
# the User model.
if prop.name in props:
# This line of code sets the property of the PublicUser
# instance to the value of the same property on the User
# instance.
prop.__set__(pu, props[prop.name].__get__(self, type(self)))

return pu

如果这不是一个好的方法,请发表评论。

最佳答案

你不能在你的 User 类中创建一个方法来实例化一个 ReadOnlyUser 对象并适本地复制成员变量的值吗?您的调用类似于 User.get_by_id(1).readonly(),其中 readonly 方法定义如下:

class User(db.Model):
def readonly(self):
return ReadOnlyUser(self.name, self.id);

或者您可以让您的 User 类扩展另一个类,使用方法根据要复制的一些静态变量列表属性自动执行此操作,或其他。

附言我不会用 Python 编写代码

关于python - 在 GAE 中公开 "dumbed-down"模型的只读实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com