Django源码分析(三):wsgi

起步

上节咱们知道了 django 是如何运行起一个服务的。html

可是这里面涉及到一个 wsgi 的知识点。python

WSGI 历史

WSGI 协议

全称叫作 Web Server Gateway Interfaceweb

首先这个如标题所说,它是一种协议,一种规范。它不是服务器、框架、模块、API或软件。django

它描述了 web server(web服务器)web application(web应用) 通讯的规范。这种规范在 PEP333 提出。(主要为了支持3.x并提供一个通用、高级的接口。)flask

既然是协议、规范,那么必定是为了解决一些问题的。服务器

若是没有该规范,一个服务器调用应用是用这种方式,另外一个服务器调度是那种方式,如此的话,编写的应用部署只能局限于某些服务器,达不到通用的效果。app

例如咱们经常接触的 web 框架有 djangoflaskbottle 等等,它们均支持了 wsgi 协议。框架

关于支持了 WSGI 协议的 web server,具体可参见 Servers which support WSGIpost

Why you need WSGI

WSGI 加快了Python web应用程序的开发,由于只需了解关于WSGI的基本信息。若是使用 djangocherrypy,则不须要关心特定框架如何利用WSGI标准。可是,了解如何实现 WSGI 将有很是大的好处。调试

WSGI 接口

概念

WSGI接口有两个方面:服务器(网关)方面,以及应用程序(框架)方面。

服务器端调用应用程序端提供的可调用对象。如何提供该对象的细节取决于服务器或网关。假设某些服务器或网关须要应用程序的部署人员编写一个简短的脚原本建立服务器或网关的实例,并为其提供应用程序对象。其余服务器和网关可使用配置文件或其余机制来指定应该从何处导入应用程序对象或以其余方式获取应用程序对象。

要求

WSGI 对于 application 对象有以下三点要求:

  • 必须是一个可调用的的对象。
  • 接收俩个必选参数 environstart_response
  • 返回值必须是可迭代对象,用来表示 http body

作什么

  • web server 负责从客户端接收请求,将 request 转发给 application,继而将 application 返回的 response 返回给客户端。
  • application 接收由 web server 转发的 request,并将处理结果返回给 server

djangofalskbottle 等框架都有本身实现的简单 WSGI Server,可是这种通常用于开发环境下调试,生产环境下建议使用其它的 wsgi server

参考文献

相关文章
相关标签/搜索