我正在努力很好地理解Web开发中关注点分离的问题,尤其是在WSGI中。
这个疑问让我读到有关Flask的文章,然后阅读有关Werkzeug的文章,所以我将以它们为例来集中讨论我的问题。
首先是Werkzeug web page中的示例代码:
from werkzeug.wrappers import Request, Response @Request.application def application(request): return Response('Hello World!') if __name__ == '__main__': from werkzeug.serving import run_simple run_simple('localhost', 4000, application)
有一个return Response()
。它看起来像一个Web应用程序。但是Werkzeug并不是作为Web框架呈现的,而是作为“ WSGI实用程序库”呈现的。它在WSGI in Read the Docs中显示为中间件。
然后我在PEP 3333 -- Python Web Server Gateway Interface v1.0.1中找到了它:
请注意,相对于某些应用程序,单个对象可以扮演服务器的角色,而对于某些服务器而言,它也可以充当应用程序。此类“中间件”组件可以执行以下功能:
- 在相应地重写环境之后,基于目标URL将请求路由到不同的应用程序对象。
- 允许多个应用程序或框架在同一过程中并行运行
- 通过网络转发请求和响应,实现负载平衡和远程处理
- 执行内容后处理,例如应用XSL样式表
所以,这是我的问题:
1.中间件(例如插件)是否可以向服务器或应用程序添加功能?我想是的,但可以肯定。
2.是否可以仅使用Werkzeug之类的工具来部署整个(简单的)Web应用程序?
2a。如果是:与这些工具相比,专用Web框架具有哪些优势?我知道Flask是建立在Werkzeug之上的,那么Flask会增加什么呢?
2b。如果否:代码示例中的return Response()
语句是什么?我是否误解了Web框架/应用程序的概念?
谢谢。