python的WSGI接口

WSGI:Web Server Gateway Interface.python

WSGI是爲python語言定義的web服務器和web應用程序或框架之間的一種簡單而實用的接口。wsgi是一個web組件的接口規範,它將web組件分爲三類:server,middleware,application。接下來簡單介紹下這三個組件:git

  • wsgi server :能夠理解爲一個符合wsgi規範的web server,接收request請求,封裝一系列環境變量,按照wsgi規範調用註冊的wsgi app,最後將response返回給客戶端。
  • wsgi application :就是一個普通的callable對象,當有請求到來時,wsgi server會調用這個wsgi app。這個對象接收兩個參數,一般爲environ,start_response。environ能夠理解爲環境變量,跟一次請求相關的全部信息都保存在了這個環境變量中,包括服務器信息,客戶端信息,請求信息。start_response是一個callback函數,wsgi application經過調用start_response,將response headers/status 返回給wsgi server。此外這個wsgi app會return 一個iterator對象 ,這個iterator就是response body。
  • wsgi middleware :能夠簡單地理解爲對application的封裝。經過封裝實現一些公用的功能,以下示例用一個簡單Dispatcher Middleware,用來實現URL 路由:

首先了解HTTP協議和HTML文檔,就能夠明白一個Web應用的本質就是:github

  1. 瀏覽器發送一個HTTP請求;web

  2. 服務器收到請求,生成一個HTML文檔;瀏覽器

  3. 服務器把HTML文檔做爲HTTP響應的Body發送給瀏覽器;服務器

  4. 瀏覽器收到HTTP響應,從HTTP Body取出HTML文檔並顯示。app

 運行:框架

建立python腳本,並將兩個文件放在同一文件下。函數

編寫hello.py(實現Web應用程序的WSGI處理函數)spa

 

其中,application 函數接收兩個參數,environ是一個包含全部HTTP請求信息的dict對象,start_response是一個發送HTTP響應的函數,該函數就是符合WSGI標準的一個HTTP處理函數。調用start_response()就發送了一個http header, http body 就是下文return 的數據。 

運行server.py(負責啓動WSGI服務器,加載application()函數)。在地址欄輸入用戶名做爲URL的一部分,將返回Hello, xxx!

 

 注意:要確保8000端口未被其餘程序佔用,不然啓動將失敗,可修改爲其餘端口。

最後的啓動結果以下:

  在命令行能夠看到wsgiref打印的log信息:

 

Ctrl+C可終止服務器。

 

參考文檔https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432012393132788f71e0edad4676a3f76ac7776f3a16000

https://zhangchenchen.github.io/2016/09/05/python-web-intro/#A

相關文章
相關標籤/搜索