我正在通过 App NDB 编写 REST api

我排除了现有的库,因为我需要控制事务和缓存。

我出于类似的原因排除了它,还因为我不想使用他们提供的客户端。

在评估架构决策时,我遇到了问题和奇怪的情况,这是因为我可能在风格方面没有足够的经验。

目前,我正在尝试提出一些指导方针来塑造我的代码库:

我遇到的一件特别的事情是

我使用映射模型实现了多对多关系,例如

,与用户和

的关键

现在,在我的服务中,有时我想返回一个包含当前用户所属组织列表的对象,并递归获取每个组织中的公司:

'':[

'名称':'测试'

'': [ {}, {}]

},

我这样做

定义(用户):

定义 (x):

= .(x) #这个

X

= [ .get() for in .(用户)]

[(x) 中的 x ]

在突出显示的行中,我将动态属性 \'\' 附加到组织模型

现在,如果我在处理程序中调用此方法,当我创建字典表示形式以输出 json 时,ndb.Model.() 实现会忽略动态附加的属性。

我尝试过的一种解决方案是(在我的处理程序中)

xs = .(u)

= [x.() for x in xs]

对于 (0,len(xs)) 中的 x:

[x][''] = xs[x].()

但我不喜欢它,因为我需要知道每个组织都有一个 \'\' 属性,而且代码看起来有点复杂并且不明显

另一种方法是覆盖 ndb.Model.()

隔离动态附加属性并提供字典表示简化了处理程序中的代码,让我只需对服务返回的内容进行 call() 即可。

从 ..ext 导入 ndb

导入实用程序

10

11

12

13

14

类(ndb.模型):

=ndb。(=正确)

=ndb。(=正确)

# 应用程序时钟时间是

# 时间 (UTC).s

def(自身,=无,=无):

= 超级(, 自我).(=, =)

['key'] = self.key.id() #获取密钥

# add 添加到类中

= {k:v for (k,v) in vars(self).() if not k.('_')}

对于 prop,.() 中的 val:

[prop] = val.() if not (val, list) else [x.() for x in val]

util.()

您对这种方法有什么建议吗? 任何想法将不胜感激!

ndb 通过类型支持动态属性。

而不是将模型定义为:

类(ndb.模型):

使用:

定义它

类(ndb.):

现在,如果你写 =[…],call() 将输出这些公司。 当您 put() 这些实体时要小心,因为任何动态添加的属性也将被放入数据存储中。

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注