我发现使用Flask的before_request()和/或after_request()与使用WSGI中间件的区别究竟是多么令人困惑.
说我想做一些非常愚蠢的事情:
>每个请求体都应扫描“bacon”一词,并替换为“eggs”.
>现在请求命中flask-view(根据url-mapping),view-function创建响应
>每个响应体应扫描“蛋”并替换为“培根”
我会使用WSGI中间件还是Flask功能?来自django的非常强大的中间件套件,差异对我来说并不清楚.
提前致谢.
贝尔尼
解决方法
实际上,你在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中间件库,以便可以在其他框架中使用它.