11

before_request()我发现使用 Flask和/或after_request()与使用 WSGI 中间件的区别到底是什么让我感到非常困惑。

假设我想做一些非常愚蠢的事情:

  • 每个请求正文都应扫描“bacon”一词并替换为“eggs”。
  • 现在请求命中flask-view(根据url-mapping),view-function创建响应
  • 每个响应体都应该扫描“鸡蛋”并替换为“培根”

我会使用 WSGI 中间件还是 Flask 函数?来自 django 的一个非常强大的中间件套件,我不清楚区别。

提前致谢。伯尼

4

1 回答 1

12

实际上,您在 Django 中拥有完全相同的选择。Django 在某些方面是基于 WSGI 构建的,所以理论上你也可以在 Django 中编写 WSGI 中间件或 Django 中间件。您没有混淆的原因是 Django 社区通常会引导开发人员远离 WSGI 中间件。一个原因是由于 Django 被设计为在mod_python和 WSGI 上同样工作。通过使用 Django 中间件,您的中间件可以在两个系统上运行(参见James Bennett 的这篇文章)。

创建 WSGI 中间件的一个优点是它可以在多个框架中使用。例如,Beaker是一个会话和缓存 WSGI 中间件,可以在任何 WSGI 框架中使用。如果它是专门用 Flask 编写的,那么 Pyramid 开发人员就无法使用它。该库的维护者特别确保该库可以在多个框架中工作,因此他将其编写为 WSGI 库。

基本上,这就是我做出决定的方式:

  1. 如果您只是编写一个对您的应用程序执行特定操作的中间件,请使用框架的中间件。
  2. 如果您认为您的中间件在您的一些应用程序中有用,并且可能对其他人有帮助,请仍然使用您框架的中间件(Flask 通常将其称为“扩展”)。以Flask -SQLAlchemy为例。
  3. 如果人们对您的中间件真正感兴趣并且愿意提供帮助,请考虑将其转换为 WSGI 中间件库,以便可以在其他框架中使用。
于 2012-08-13T02:11:25.290 回答