在 Pyramid 中使用 URLDispatch 时,上下文谓词有用吗?

Posted

技术标签:

【中文标题】在 Pyramid 中使用 URLDispatch 时,上下文谓词有用吗?【英文标题】:Is the Context predicate ever useful when using URLDispatch in Pyramid? 【发布时间】:2017-01-04 19:35:07 【问题描述】:

我正试图围绕 Pyramid 1.6+ 中“上下文”谓词的有用性。仅使用 URLDispatch 时,例如,我可能有一个可调用的视图,如下所示:

@view_config(route_name="employee_edit", context=Employee)
...

假设我有一个这样定义的路由,并定义了一个路由工厂:

config.add_route("employee_edit","/employee/edit/id", factory=Employee)

暂时忽略权限问题,当用户浏览到 employee_edit 路由时,Pyramid 可能会发现上述可调用视图是可以接受的。很好。

但我的问题是:在上面的示例中,“context=Employee”对我的@view_config 有什么价值?...我在人们的代码中看到了这一点。

如果我理解的话, context= 基本上意味着“只有在上下文对象包含与 context = 中指定的对象相同的类型时才能使用此视图。换句话说,在上面的例子中,除非它包含一个 Employee 对象,否则不要调用这个视图。

但是上下文怎么可能不包含 Employee 对象呢?换句话说,在我上面的示例中,我假设我只能有一个视图指定一个路由,并且一个路由被硬编码以在上下文中发出一个 Employee 对象......这并不是说视图可以用于其他路线,可以吗?

【问题讨论】:

【参考方案1】:

主要涉及两种情况:

    如果工厂可能返回不同类型的上下文,那么您可能希望在此基础上进行匹配。

    如果您的路由使用use_global_views=True,而您的视图没有route_name=,则您的视图仅与上下文耦合,而不与显式路由耦合。

否则,如您的示例所示,假设工厂始终返回该类型的上下文是多余的。

【讨论】:

Pyramid 的聪明和灵活从未停止让我惊叹:)

以上是关于在 Pyramid 中使用 URLDispatch 时,上下文谓词有用吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python3 在 Pyramid 中使用 Websocket

在 Pyramid 中存储和验证用于登录的加密密码

使用 React 和 Pyramid(微服务架构)进行身份验证,如何存储“会话数据”?

在 Elastic Beanstalk 上部署 Pyramid 应用程序

使用 Pyramid 压缩所有 HTTP 流量

偶尔禁用 Pyramid 中间件