【问题标题】:Is a Pyramid "model" also a Pyramid "resource"?金字塔“模型”也是金字塔“资源”吗?
【发布时间】:2019-07-19 00:31:58
【问题描述】:

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

然而,在区分“模型”的概念(即在 SQLAlchemy 的声明性系统下定义的类)和“资源”的概念(即定义访问控制的方法)时,我遇到了一个绊脚石与 Pyramid 的身份验证系统一起使用的视图列表)。

我理解上述陈述似乎表明我已经理解了其中的区别,但是我无法理解我是应该制作模型资源(通过直接在模型类中添加 __acl__ 属性)还是创建一个单独的资源类(具有正确的__parent____name__ 属性),表示对使用模型的视图的访问。

感谢任何指导。

【问题讨论】:

    标签: python python-3.x pyramid


    【解决方案1】:

    如果应用程序的域模型是分层的,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 应用程序,这些功能适用于您可能没有意义的用例。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-09-14
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-03
        • 2015-07-01
        相关资源
        最近更新 更多