上節咱們知道了 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
。