金字塔资源:简单的英语

2024-03-22

我一直在阅读对新创建的金字塔应用程序实施授权(和身份验证)的方法。我不断遇到“资源”这个概念。我在应用程序中使用 python-couchdb,根本不使用 RDBMS,因此没有 SQLAlchemy。如果我像这样创建一个 Product 对象:

class Product(mapping.Document):
  item = mapping.TextField()
  name = mapping.TextField()
  sizes = mapping.ListField()

有人可以告诉我这是否也称为资源吗?我一直在阅读金字塔的整个文档,但它没有在哪里用简单的英语解释术语资源(也许我只是愚蠢)。如果这是资源,这是否意味着我只需将 ACL 内容放在这里,如下所示:

class Product(mapping.Document):
  __acl__ = [(Allow, AUTHENTICATED, 'view')]
  item = mapping.TextField()
  name = mapping.TextField()
  sizes = mapping.ListField()

  def __getitem__(self, key):
      return <something>

如果我也使用遍历,这是否意味着我添加了getitem我的 python-couchdb 产品类/资源中的函数?

抱歉,所有新术语确实令人困惑(我来自 Pylons 0.9.7)。

提前致谢。


我认为你缺少的部分是遍历部分。是产品 资源?好吧,这取决于你的遍历产生了什么,它 可以生产产品......

也许最好从视图回到 创建应用程序时如何配置......

这是一个典型的视图。

  @view_config(context=Product, permission="view")
  def view_product(context, request):
      pass # would do stuff  

因此,当上下文是 Product 的实例时,会调用此视图。和 如果acl该实例的属性具有“视图” 允许。那么 Product 的实例如何成为上下文呢?

这就是遍历的魔力所在。 遍历简单来说就是字典的字典。所以一种方法是,这 如果你有一个像这样的网址,那么对你有用

/product/1

不知何故,某些资源需要通过 url 来确定上下文,以便可以确定视图。如果什么 我们有类似...

  class ProductContainer(object):
      """
      container = ProductContainer()
      container[1]
      >>> <Product(1)>
      """
      def __init__(self, request, name="product", parent=None):
          self.__name__ = name
          self.__parent__ = parent
          self._request = request

      def __getitem__(self, key):
          p = db.get_product(id=key)

          if not p:
              raise KeyError(key)
          else:
              p.__acl__ = [(Allow, Everyone,"view")]
              p.__name__ = key
              p.__parent__ = self
              return p

现在文档中已对此进行了介绍,我正在尝试将其煮沸 直至您需要了解的基础知识。 ProductContainer 是一个对象 这就像一本字典。这 ”name" and "parent” 金字塔需要属性才能生成 url 正确工作的方法。

现在我们有了一个可以遍历的资源。我们如何告诉 金字塔遍历产品容器?我们通过 配置器对象。

  config = Configurator()
  config.add_route(name="product",
                   path="/product/*traverse",
                   factory=ProductContainer)
  config.scan()
  application = config.make_wsgi_app()

工厂参数需要一个可调用的参数,它会将当前的参数传递给它 要求。恰好ProductContainer。init会做 那就好了。

对于这样一个简单的例子来说,这似乎有点太多了,但希望 你可以想象各种可能性。这种模式允许非常 细粒度的权限模型。

如果您不想要/不需要非常精细的权限模型,例如行 level acl 你可能不需要遍历,相反你可以使用 具有单个根工厂的路由。

  class RootFactory(object):
      def __init__(self, request):
          self._request = request
          self.__acl__ = [(Allow, Everyone, "view")]  # todo: add more acls


  @view_config(permission="view", route_name="orders")
  def view_product(context, request):
      order_id, product_id = request.matchdict["order_id"], request.matchdict["product_id"]
      pass # do what you need to with the input, the security check already happened

  config = Configurator(root_factory=RootFactory)

  config.add_route(name="orders",
                   path="/order/{order_id}/products/{product_id}")

  config.scan()
  application = config.make_wsgi_app()

注意:我从记忆中完成了代码示例,显然您需要所有必要的导入等。换句话说,这不能用作复制/粘贴

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

金字塔资源:简单的英语 的相关文章

随机推荐

  • 如何强制 XmlWriter 正确处理命名空间?

    我想使用 XmlWriter 编写类似这样的内容 全部在一个命名空间中
  • Code First 实体框架为主键列名称添加下划线

    我有一个域类的流畅映射 它定义了每列的名称 包括由两列组成的主键 NotificationId 和 IdentityId 这些也是分别指向Notification Id和Identity Id的外键 每当我使用此映射作为查询的一部分时 它都
  • 解决具有最大变量的优化问题

    原始问题 在给定收益矩阵的情况下找到玩家一的最佳混合策略 0 2 1 1 3 4 0 5 1 3 0 2 1 1 2 1 我有以下最大化问题 最大电压 s t3p1 p3 2p4 2p1 4p2 3p3 p4 p1 2p4 p1 5p2 2
  • Symfony 3 - 将控制器代码外包到服务层

    我对 Symfony 3 很陌生 我想避免 我的控制器中的业务逻辑 到目前为止我所做的是
  • 正则表达式获取VB.Net源代码中的注释

    我在 vb net 中有一个语法高亮功能 例如 我使用正则表达式来匹配 IF 然后将其着色为蓝色 在我尝试弄清楚如何进行评论之前 这一切都很完美 我为评论编写的语言可以是如果该行以单引号 开头 或者如果该行中的任何位置有两个单引号 this
  • 使用非可选但可能未定义的字段指定 Zod 架构

    是否可以使用可能的字段定义 Zod 模式undefined 但不是可选的 在 TypeScript 中 这是以下之间的区别 interface IFoo1 somefield string undefined interface IFoo2
  • Callkit可以与非voip通话一起使用来获取ios中的通话状态吗?

    我已阅读有关进行非 voip 呼叫的问题 看来开放网址是唯一的方法 由于 CoreTelephony 已被弃用 当使用开放的 url 进行呼叫时 是否可以使用 Callkit 来获取呼叫状态 如果没有 有什么方法可以以编程方式获取呼叫状态
  • Margin-Top 将外部 div 向下推

    我有一个标题 div 作为包装 div 中的第一个元素 但是当我向标题 div 内的 h1 添加上边距时 它会将整个标题 div 向下推 我意识到每当我将上边距应用于页面上的第一个可见元素时就会发生这种情况 这是一个示例代码片段 谢谢 di
  • Javascript:无法播放wav文件

    基于 StackExchange 的代码 我编写了打开 wav 文件的代码 wav 文件本身是一个有效的文件 因为它可以与我的 Python 程序一起正常播放 但 javascript 函数不起作用 声音文件与我的 html 文件位于同一文
  • Content-Id header的精确格式

    当谈到格式时我真的很困惑Content Id消息部分中的标头 在我看来 只有RFC 2045 https www rfc editor org rfc rfc2045 section 7涵盖了标头的格式 但很简短 在构建高级用户代理时 可能
  • 构造函数内部与外部的 JavaScript 类属性

    我正在努力理解在构造函数内部和外部定义属性之间的区别 在下面的示例中 两个属性都可以以相同的方式在实例上访问 有什么区别 class Foo constructor this bar 1 baz 1 const foo new Foo co
  • CloudKit 在不同 iCloud 帐户之间共享数据,但并非与所有人共享数据

    在我的应用程序中 我想通过 iCloud 与其他 iCloud 用户共享数据 但不是与全世界共享数据 而是与选定的其他 iCloud 用户共享数据 我想过一种可行的方法 但我不确定它是否可行 以及我是否忘记或误解了一些事情 假设用户 A 希
  • CakePHP 2.x Containable 内的 GROUP BY

    我正在疯狂地尝试找到一个好的解决方案 要么使用set extract 或者其他的东西 我想在我的容器中添加一个 GROUP BY params array conditions gt array Project id gt ProjectI
  • PHP - 使用 ADBDB 同时连接到同一服务器上的两个数据库

    是否可以使用 PHP 5 3 ADODB5 SQL Server 2008 在同一服务器上打开与两个模式的连接 这就是我正在尝试的 Connect to users database connUsers NewADOConnection m
  • 使用 NSPersistentStoreCoordinator 的要点是什么?

    在核心数据讲座中斯坦福193P http www stanford edu class cs193p cgi bin drupal iTunes 上的 iPhone 课程 讲师使用 Core Data 编写了一个示例项目 而没有使用NSPe
  • Hibernate二级缓存-打印结果

    我使用 Cache 注释在应用程序中定义了二级缓存 我正在使用 findById 查询 如下所示 long id 4 Company cmp companyDAO findById id 其中 Company 是我从数据库获得的对象 如何检
  • Spring Boot 和 Ehcache - 多 CacheException

    我正在尝试向 springboot 应用程序添加缓存 但遇到了启动过程中引发 org ehcache jsr107 MultiCacheException 异常的问题 我正在使用以下内容 全部通过 Maven pom 文件加载 Spring
  • Python - 什么时候可以使用 os.system() 发出常见的 Linux 命令

    从另一个线程中分离出来 什么时候适合使用 os system 发出 rm rf cd make xterm ls 等命令 考虑到上述命令有模拟版本 make 和 xterm 除外 我假设使用这些内置 python 命令而不是使用 os sy
  • Seaborn:ValueError:调色板='jet'否

    从seaborn运行以下示例docs https seaborn pydata org generated seaborn boxplot html有论据palette jet import seaborn as sns tips sns
  • 金字塔资源:简单的英语

    我一直在阅读对新创建的金字塔应用程序实施授权 和身份验证 的方法 我不断遇到 资源 这个概念 我在应用程序中使用 python couchdb 根本不使用 RDBMS 因此没有 SQLAlchemy 如果我像这样创建一个 Product 对