上节咱们知道了 django
是如何运行起一个服务的。html
可是这里面涉及到一个 wsgi
的知识点。python
全称叫作
Web Server Gateway Interface
web
首先这个如标题所说,它是一种协议,一种规范。它不是服务器、框架、模块、API或软件。django
它描述了 web server(web服务器)
和 web application(web应用)
通讯的规范。这种规范在 PEP333 提出。(主要为了支持3.x并提供一个通用、高级的接口。)flask
既然是协议、规范,那么必定是为了解决一些问题的。服务器
若是没有该规范,一个服务器调用应用是用这种方式,另外一个服务器调度是那种方式,如此的话,编写的应用部署只能局限于某些服务器,达不到通用的效果。app
例如咱们经常接触的 web 框架有 django
、flask
、bottle
等等,它们均支持了 wsgi
协议。框架
关于支持了 WSGI 协议的 web server,具体可参见 Servers which support WSGI。post
WSGI 加快了Python web应用程序的开发,由于只需了解关于WSGI的基本信息。若是使用 django
、cherrypy
,则不须要关心特定框架如何利用WSGI标准。可是,了解如何实现 WSGI 将有很是大的好处。调试
WSGI接口有两个方面:服务器(网关)方面,以及应用程序(框架)方面。
服务器端调用应用程序端提供的可调用对象。如何提供该对象的细节取决于服务器或网关。假设某些服务器或网关须要应用程序的部署人员编写一个简短的脚原本建立服务器或网关的实例,并为其提供应用程序对象。其余服务器和网关可使用配置文件或其余机制来指定应该从何处导入应用程序对象或以其余方式获取应用程序对象。
WSGI 对于 application
对象有以下三点要求:
environ
、start_response
。http body
。web server
负责从客户端接收请求,将 request
转发给 application
,继而将 application
返回的 response
返回给客户端。application
接收由 web server
转发的 request
,并将处理结果返回给 server
。像 django
、falsk
、bottle
等框架都有本身实现的简单 WSGI Server
,可是这种通常用于开发环境下调试,生产环境下建议使用其它的 wsgi server
。