金字塔“模型”也是金字塔“资源”吗?

5

我目前正在学习如何使用Python Pyramid网络框架,发现文档非常好。

然而,当涉及到区分“模型”(即在SQLAlchemy的声明性系统下定义的类)和“资源”(即为了与Pyramid的授权系统一起使用而定义的用于定义视图上的访问控制列表的手段)的概念时,我遇到了一个障碍。

我理解上述陈述似乎表明我已经理解了区别,但我仍然很难理解我是否应该将模型作为资源进行处理(通过直接在模型类中添加__acl__属性),还是创建一个单独的资源类(具有正确的__parent__和__name__属性),它代表对使用模型的视图的访问。

任何指导都将不胜感激。

2个回答

2
如果应用程序的域模型是分层的,Pyramid提供了资源的概念来构建资源树。遍历用于将URL映射到代码并识别资源树中的资源。通常在使用关系数据库时不使用资源和遍历。
摘自“Defending the design - Pyramid Does Traversal, and I Don't Like Traversal”
在Pyramid中,遍历是将URL路径解析为资源树中的资源对象的行为。有些人对此感到不舒服,并认为这是错误的。幸运的是,如果您使用Pyramid并且不想以资源树的术语建模应用程序,则根本不需要使用它。相反,请使用URL调度将URL路径映射到视图。
关系数据库不是自然层次结构的,因此不能像树一样遍历它。
您可以确信,如果您不想理解遍历,您就不必理解。您可以仅使用URL调度快乐地构建Pyramid应用程序。
摘自“Resources”
资源是表示与您的应用程序相关的树中“位置”的对象。 (...) 资源树是一组嵌套的类似字典的对象,您可以使用它们来表示网站的结构。
在使用遍历将URL映射到代码的应用程序中,资源树结构被大量使用以将每个URL映射到视图可调用项。当使用遍历时,Pyramid将通过遍历其嵌套的字典结构来遍历资源树以查找上下文资源。一旦找到上下文资源,将使用上下文资源和请求中的数据来查找视图可调用项。
在使用URL调度的应用程序中,资源树仅间接使用,并且常常对开发人员“不可见”。 (...) 此根资源有时会附加安全声明,但不需要具有任何声明。一般来说,在使用URL调度的应用程序中,资源树比使用遍历的应用程序不那么重要。
我认为文档已经广泛涵盖了这个主题。

我曾经推荐过一个项目来强调Pyramid的能力。

我的个人看法是:您不需要完全事先了解这两个概念就可以采用Pyramid框架进行第一个项目。在使用关系型数据库时,请选择URL分派和SQLAlchemy。

摘录 - Pyramid提供了太多的“Rails”

根据设计,Pyramid不是一个特别有见解的Web框架。Pyramid提供了一些其他Web框架没有的功能。这些功能是为使用案例而设计的,如果您构建简单的(...)Web应用程序,则可能对您没有意义。


1

我不确定是应该在模型类中直接添加acl属性,还是创建一个单独的资源类,这让我感到困扰。

答案取决于您想要的耦合级别。对于简单的应用程序,出于简单起见,我建议将模型作为资源。但是对于具有高内聚性和低耦合性的复杂应用程序,最好将模型与资源分开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接