理解金字塔中的资源和环境

2024-04-27 03:53:17 发布

您现在位置:Python中文网/ 问答频道 /正文

请原谅我,因为我刚开始学习金字塔。我很难理解金字塔中的上下文和资源,关于URL分派。我不太清楚文档中的描述意味着什么,上下文和资源有点循环(对我来说)。

  • 什么是金字塔中的资源?这只是url试图表示的吗? 例如,如果url是/organization/add_users,那么是资源组织还是用户?在
  • 在上面的例子中,上下文也是组织的吗?在

还有

  • 什么是上下文对象?在
  • 上下文对象应该包含什么?本教程中的示例只有ACL,init方法中没有任何内容。

    class RootFactory(object):
    __acl__ = [(...some permissions...)]
    
    def __init__(self):
        pass
    
  • 当一个异常被抛出(例如禁止)时,上下文到底在什么时候发生变化?

  • 当出现禁止的错误时,我可以看到更改上下文的目的,但是在执行类似验证之类的操作时,为什么要抛出一个异常,该异常注册到另一个视图\u callable中,它将呈现到不同的模板,当我可以简单地呈现到同一视图中的不同模板时,而不是抛出异常?(我在文档中看到了add_view的验证错误示例)


Tags: 对象用户文档add视图模板url示例
2条回答

这里的示例:http://docs.pylonsproject.org/projects/pyramid/1.1/tutorials/wiki2/authorization.html#adding-login-and-logout-views不正确也无济于事。在

引发的异常(至少与金字塔1.0-2相关)是金字塔。例外。禁止;不是这个例子pyramid.httpexceptions.HTTPForbidden. 在

然而,在本教程中遇到的问题中,我学到了其他有用的东西。在

首先,在使用URL分派时,您甚至想关心这些东西的主要原因是为了使用pyramid的auth系统。如果您不关心这些,那么您可以完全忽略上下文和资源树,继续进行调度。在

资源树

金字塔有一个独特的资源树概念,它实际上是映射到路径的对象树。此树从根目录向下遍历到所提供路径的末尾。在遍历过程中,如果路径耗尽或树到达离开节点,树中的对象现在是context。在

在URL分派中,遍历不会发生(默认情况下),因此上下文始终是资源树的根。在

一般来说,您可以在应用程序中为您想要的任何内容使用上下文。它由ACLAuthorizationPolicy显式使用以确定权限。这是一个完整的主题,我建议您看看我的演示,它解释了如何在URL Dispatch[1]中使用Pyramid的auth系统。在

例外情况

金字塔中的异常处理有两种不同的方式:

  1. 您可以在视图中使用try: except:返回不同的响应。在
  2. 您可以利用异常视图来更一般地处理应用程序中的异常。在

请注意,第二种方法对于呈现404页是必需的,如果您使用的是Pyramid的auth,那么也需要禁用页面。这是因为Pyramid在内部抛出NotFound和Forbidden异常,如果要自定义它们,必须捕捉并呈现这些异常。在

当抛出一个异常,并且有一个异常视图注册为匹配该类型时,Pyramid将调用异常视图并将异常作为新上下文传入,因此上下文就发生了更改。在

我不确定验证是否是异常视图的一个好例子。更典型的是,视图用于错误情况,或者在应用程序的非视图部分中短路执行。例如,当视图无法连接到数据库时,或者希望返回4xx或5xx响应时,您可能希望处理并返回不同的页面。默认情况下,如果未处理异常,WSGI服务器只会将其转换为通用的500页。异常视图允许您自定义该行为。在

所有这一切的重要收获是它都是可选的。如果您感到困惑,不要担心,因为您可以使用金字塔而不需要这些东西,并且随着您越来越适应,您可以开始将它们合并到您的应用程序中。在

相关问题 更多 >