Python WSGI概述(更新ing)

PEP-0333 -- Python Web Server Gateway Interface v1.0

說明

WSGI是一種規(guī)范,描述web server和web application通信的規(guī)范。要實(shí)現(xiàn)WSGI協(xié)議,必須同時(shí)實(shí)現(xiàn)web server和web application。WSGI的目的就是規(guī)范Web服務(wù)器和應(yīng)用(框架)之間的交互。

WSGI 規(guī)定每個(gè) python 程序(Application)必須是一個(gè)可調(diào)用的對象(實(shí)現(xiàn)了call 函數(shù)的方法或者類),接受兩個(gè)參數(shù) environ(WSGI 的環(huán)境信息) 和 start_response(開始響應(yīng)請求的函數(shù)),并且返回 iterable。
幾點(diǎn)說明:

  • environ 和 start_response 由 http server 提供并實(shí)現(xiàn)
  • environ 變量是包含了環(huán)境信息的字典
  • Application 內(nèi)部在返回前調(diào)用 start_response
  • start_response也是一個(gè) callable,接受兩個(gè)必須的參數(shù),status(HTTP狀態(tài))和 response_headers(響應(yīng)消息的頭)
  • 可調(diào)用對象要返回一個(gè)值,這個(gè)值是可迭代的。

應(yīng)用,服務(wù)器,中間件

  • application:可以被調(diào)用的一個(gè)對象,一般指包含__call__方法對象
  • server:指實(shí)現(xiàn)了調(diào)用應(yīng)用的部分
  • middleware:處于服務(wù)器和應(yīng)用兩側(cè),起粘合作用,具體包括:請求處理,響應(yīng),environ處理等

WSGI environ 變量

  • REQUEST_METHOD:HTTP請求類型,例如GET或POST
  • SCRIPT_NAME:URL請求中路徑開始的部分,對應(yīng)應(yīng)用程序?qū)ο螅?)
  • PATH_INFO:URL請求路徑剩余部分,指定請求目標(biāo)在應(yīng)用程序內(nèi)部的虛擬位置(?)
  • QUERY_STRING:URL請求跟在(?)的部分,可為空或不存在
  • CONTENT_TYPE:HTTP請求中任何Content-Type域的內(nèi)容,可為空或不存在
  • CONTENT_LENGTH:HTTP請求中任何Content-Length域的內(nèi)容,可為空或不存在
  • SERVER_NAME,SERVER_PORT
  • SERVER_PROTOCOL

Example:

>>> from webob import Request
>>> from pprint import pprint
>>> req = Request.blank("/article?id=1")
>>> req
<Request at 0x7f965014e550 GET http://localhost/article?id=1>
>>> pprint(req.environ)
{'HTTP_HOST': 'localhost:80',
 'PATH_INFO': '/article',
 'QUERY_STRING': 'id=1',
 'REQUEST_METHOD': 'GET',
 'SCRIPT_NAME': '',
 'SERVER_NAME': 'localhost',
 'SERVER_PORT': '80',
 'SERVER_PROTOCOL': 'HTTP/1.0',
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x7f96529cf1e0>,
 'wsgi.input': <_io.BytesIO object at 0x7f965013db30>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)}

wsgiref+Webob+Routs+Paste+PasteDeploy

wsgiref 是實(shí)現(xiàn)wsgi規(guī)范的模塊,提供了操作WSGI環(huán)境變量和response頭的工具,并還實(shí)現(xiàn)了一個(gè)WSGI服務(wù)器

Webob 提供了封裝后的WSGI請求(Request)環(huán)境,并輔助創(chuàng)建WSGI響應(yīng)(Response

Routes 提供是管理URL路由的模塊

Paste

PasteDeploy

Paste.ini文件解析

  • filter:實(shí)現(xiàn)一個(gè)過濾器中間件
  • pipline:把filter串起來
  • app:具體的application
  • composite:將httpd請求分發(fā)到指定的application
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容