【问题标题】:flask: wsgi-middleware vs before_ and after_request()烧瓶:wsgi-middleware 与 before_ 和 after_request()
【发布时间】:2012-08-12 23:12:53
【问题描述】:
我发现使用 Flask 的 before_request() 和/或 after_request() 与使用 WSGI 中间件究竟有什么区别,我感到非常困惑。
假设我想做一些非常愚蠢的事情:
- 应扫描每个请求正文中的单词“bacon”并替换为“eggs”。
- 现在请求命中 flask-view(根据 url-mapping),view-function 创建响应
- 应扫描每个响应正文中的“eggs”并替换为“bacon”
我会使用 WSGI 中间件还是 Flask 函数?来自 django 并带有一个非常强大的中间件套件,我并不清楚区别。
提前致谢。
伯尼
【问题讨论】:
标签:
request
response
flask
wsgi
middleware
【解决方案1】:
实际上,您在 Django 中拥有完全相同的选择。 Django 在某些方面是基于 WSGI 构建的,所以理论上你也可以在 Django 中编写 WSGI 中间件或 Django 中间件。您没有混淆的原因是 Django 社区通常会引导开发人员远离 WSGI 中间件。一个原因是由于 Django 被设计为在 mod_python 和 WSGI 上同样工作。通过使用 Django 中间件,您的中间件可以在两个系统上运行(请参阅this post by James Bennett)。
创建 WSGI 中间件的一个优点是它可以在多个框架中使用。例如,Beaker 是一个会话和缓存 WSGI 中间件,可以在任何 WSGI 框架中使用。如果它是专门用 Flask 编写的,那么 Pyramid 开发人员就无法使用它。该库的维护者特别确保该库可以在多个框架中工作,因此他将其编写为 WSGI 库。
基本上,这就是我做出决定的方式:
- 如果您只是编写一个执行特定于您的应用程序的中间件,请使用您的框架的中间件。
- 如果您认为您的中间件在您的一些应用程序中有用,并且可能对其他人有帮助,请仍然使用您的框架的中间件(Flask 通常将其称为“扩展”)。以Flask-SQLAlchemy 为例。
- 如果人们对您的中间件真正感兴趣并愿意提供帮助,请考虑将其转换为 WSGI 中间件库,以便可以在其他框架中使用。