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

问题描述 投票:5回答:2

我目前正在学习如何使用Python Pyramid Web框架,并且发现文档非常出色。

然而,当涉及将“模型”(即在SQLAlchemy的声明系统下定义的类)与“资源”的概念(即在视图上定义访问控制列表的方法)区分开来时,我遇到了绊脚石。用于Pyramid的auth系统)。

我理解上面的陈述似乎表明我已经理解了差异,但我无法理解我是否应该创建模型资源(通过直接在模型类中添加__acl__属性)或创建一个单独的资源类(具有适当的__parent____name__属性)表示访问使用该模型的视图。

任何指导表示赞赏。

python python-3.x pyramid
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 Dispatch和SQLAlchemy。

Excerpt - Pyramid Provides Too Many "Rails"

根据设计,Pyramid不是一个特别固执己见的Web框架。 Pyramid提供了其他Web框架所不具备的一些功能。这些功能适用于您构建简单(...)Web应用程序时可能对您没有意义的用例。


1
投票

我无法理解是否应该创建模型资源(通过直接在模型类中添加acl属性)或创建单独的资源类

答案取决于您想要的耦合程度。对于一个简单的应用程序,我建议制作模型资源只是为了简单起见。但对于具有高内聚力和低耦合水平的复杂应用程序,将模型与资源分离会更好。

© www.soinside.com 2019 - 2024. All rights reserved.