sas*_*ker 9 python resources url-routing pyramid
请耐心等待,因为我刚刚开始使用金字塔.关于URL Dispatch,我无法理解Pyramid中的上下文和资源.我不太清楚文档中的描述意味着什么,上下文和资源有些循环(对我而言).
/organization/add_users资源组织还是用户?也,
应该包含的上下文对象是什么?本教程中的示例仅具有ACL,并且在init方法中没有任何内容.
class RootFactory(object):
__acl__ = [(...some permissions...)]
def __init__(self):
pass
Run Code Online (Sandbox Code Playgroud)抛出异常(例如,禁止)在什么时候上下文发生变化?
当有类似Forbidden错误之类的东西时,我可以看到更改上下文的目的,但是在执行类似验证的操作时,为什么我应该抛出一个注册了不同view_callable的异常,当我可以简单地渲染到另一个模板时渲染到同一view_callable中的不同模板而不是抛出异常?(我在文档中看到了add_view的验证错误示例)
Mic*_*kel 13
首先,使用URL Dispatch时你想要甚至关心这些东西的主要原因是为了使用金字塔的auth系统.如果您不关心这一点,那么您可以完全忽略上下文和资源树并继续调度.
Pyramid有一个独特的资源树概念,它实际上是一个映射到路径的对象树.此树从根向下遍历到提供的路径的末尾.在遍历期间,如果路径耗尽或树命中离开节点,则树中的该对象现在是context.
在URL Dispatch中,不会发生遍历(默认情况下),因此上下文将始终是资源树的根.
通常,您可以在应用程序中使用上下文.ACLAuthorizationPolicy明确使用它来确定权限.这是一个完整的主题,我建议查看我的演示,解释如何使用带有URL Dispatch的Pyramid的auth系统[ 1 ].
Pyramid中的异常处理以两种不同的方式完成:
try: except:在视图中使用以返回不同的响应.请注意,第二种方式是渲染404页面所必需的,如果您正在使用Pyramid的auth,禁止页面也是如此.这是因为如果要自定义它们,Pyramid会在内部抛出必须捕获并呈现的NotFound和Forbidden异常.
抛出异常并且注册了异常视图以匹配该类型时,Pyramid将调用异常视图并将异常作为新上下文传递,因此当上下文发生更改时.
我不确定验证是异常视图的一个很好的例子.更典型的是,视图用于错误情况,或用于在应用程序的非视图部分中执行短路.例如,当您的视图无法连接到数据库时,或者想要返回4xx或5xx响应时,您可能希望处理和返回不同的页面.默认情况下,如果未处理异常,WSGI服务器只需将其转换为通用500页.异常视图允许您自定义该行为.
所有这一切的重要内容是它都是可选的.如果您感到困惑,请不要担心,因为您可以在没有这些东西的情况下使用Pyramid,并且随着您变得更加舒适,您可以开始将它们合并到您的应用程序中.