WSGI
1.what is WSGI?
WSGI, Web Server Gateway Interface
如全称代表的那样,WSGI不是服务器,不是API,不是Python模块,更不是什么框架,而是一种服务器和客户端交互的
接口规范!
WSGI里的组件分为『Server』,『Middleware』和『Application』三种,其中的『Middleware』是『设计模式』里的Decorator(装饰器)。
WSGI规范在PEP-333里讲得很详细:PEP 0333 -- Python Web Server Gateway Interface v1.0 ,但我觉得比理解规范更重要的,是理解其设计目的和工作原理。
WSGI规范写得有点绕,之所以绕, 主要原因可能是没有用『类型提示(Type Hints)』,如果用强类型OOP语言的那种『Interface』和『UML』来解释会清晰很多。下面我试试用这种带有『类型提示』的风格简单讲讲WSGI的原理。
设计模式:装饰者模式
装饰者模式( Decorator )
动态的给一个对象添加一些额外的功能
ComponentImpl 和 Decorator 类都实现了 IComponent 接口,不同的是 ComponentImpl 提供了具体实现,而 Decorator 是先聚合 ComponentImpl 接着在自己的实现方法即
operation()
方法中做些处理(即装饰)后再调用 ComponentImpl 对象的具体实现
装饰者模式.PNG
WSGI就是一个标准,WSGI server就是实现了这个标准的一个容器。这个标准类似于如下:
from wsgiref.simple_server import make_server
def simple_app(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return [u"This is hello wsgi app".encode('utf8')]
httpd = make_server('', 8000, simple_app)
print "Serving on port 8000..."
httpd.serve_forever()
web应用开发者只要遵从WSGI的标准,编写simple_app就可以实现自己的应用了。标准很简单:第一个environ参数表明了所有request相关的环境变量,第二个start_response用于写入一些response的返回头的信息,然后再return返回的response的数据就行了。这个就是所有的WSGI标准了。
参考链接:
https://www.zhihu.com/question/19998865 (如何理解CGI,WSGI-----知乎)
http://www.jianshu.com/p/bdf65e4afbb0 (14种常用的设计模式)
http://blog.csdn.net/sraing/article/details/8455242(WSGI的理解(转载))