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

參考文獻

相關文章
相關標籤/搜索