【问题标题】:When to use WSGI middleware?什么时候使用 WSGI 中间件?
【发布时间】:2010-09-05 13:40:30
【问题描述】:

我编写了一个路由器,它获取请求的路径,将其与正则表达式匹配,并在正则表达式匹配时调用 WSGI 处理程序。具有匹配捕获组的字典被添加到环境中。使用 WSGI 中间件修改环境是不是很糟糕?

但这就是 WSGI 中间件的发明目的吗?我刚刚阅读了WSGI Middleware Considered Harmful 并想知道是否应该重写我的路由器以不再是中间件。如果一个应用程序使用带有捕获组的dict,它就会依赖于我的中间件。另一方面,没有应用程序必须使用这个额外的字典。我也可以放弃路径参数提取并将路由器减少到路由,但是每个应用程序都必须第二次重新运行正则表达式以提取路径参数。

那该怎么办:

  • 保持原样;带有路由、路径参数提取和environ 操作
  • 使路由器成为 WSGI 应用程序和当前 WSGI 应用程序框架特定的处理程序
  • 将路由器减少到路由并提取第二次执行正则表达式匹配,以便在请求路由到的应用程序中提取路径参数

【问题讨论】:

  • 我刚刚阅读了您提到的文章,很想听听人们对这个话题的看法。请考虑通过将标题更改为 When not to use WSGI middleware? 来解决这个问题,例如 :)
  • 我现在很清楚:你不应该向 WSGI 环境中添加未在 PEP 中命名的条目。

标签: python wsgi


【解决方案1】:

如果您将东西添加到环境中,然后在应用程序中使用这些东西,没有任何回退,那么您必须在某种程度上将应用程序绑定到中间件。

在这种特殊情况下,有一个约定如何将这些捕获的值添加到环境中:wsgiorg.routing_args。因此,虽然您会将对该捕获的引用放入您的应用程序中,但这并不是完全即席通信。

(尽管您当然可以过度使用中间件,但我认为那篇文章夸大了这种情况;中间件可以是一个很好的抽象来分别考虑、实现和测试应用程序的不同部分,即使最初这些部分是为一个人的单一目标)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2014-06-04
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多