我有一個幾乎完整的簡單的網絡應用程序被編寫爲Python CGI腳本。我想將其改爲使用WSGI,但我無法找到幫助我理解WSGI實際是什麼的文檔(只能通過start_response等方式重複查找調用,但似乎沒有太多的解釋呼叫實際上是)。有人能指點我一個很好的解釋,再加上關於如何使用WSGI?需要一個好的初學者的WSGI指南
編輯:補充一點,我見過this question但答案似乎仍然不能告訴一個如何在直接腳本中使用WSGI(如在一個框架反對)。
我有一個幾乎完整的簡單的網絡應用程序被編寫爲Python CGI腳本。我想將其改爲使用WSGI,但我無法找到幫助我理解WSGI實際是什麼的文檔(只能通過start_response等方式重複查找調用,但似乎沒有太多的解釋呼叫實際上是)。有人能指點我一個很好的解釋,再加上關於如何使用WSGI?需要一個好的初學者的WSGI指南
編輯:補充一點,我見過this question但答案似乎仍然不能告訴一個如何在直接腳本中使用WSGI(如在一個框架反對)。
WSGI是PEP 333(和Python3的PEP3333),也叫做Web服務器網關接口。它有三個部分,但您感興趣的部分是您如何編寫WSGI應用程序。 WSGI應用程序是一個可調用的對象,它接受兩個參數並返回一個可迭代的對象(或者是一個生成器)。
# this is my_app module
def app(environ, start_response):
# environ is dict-like object containing the WSGI environment
# refer to the PEP for details
# start_response is a callable that, well, starts the response
headers = [('Content-Type', 'text/plain; charset=utf-8')]
start_response('200 OK', headers)
return ["I'm a WSGI application.\n"]
要運行該應用程序,需要WSGI的另一部分,它是網關。在標準庫中你會發現wsgiref
包。它包含一個CGI網關:
#!/usr/bin/python
# this is a CGI script that runs a WSGI application inside CGI handler
from wsgiref.handlers import CGIHandler
from my_app import app
CGIHandler().run(app)
,也爲開發一個簡單的HTTP服務器:
from wsgiref.simple_server import make_server
from my_app import app
httpd = make_server('localhost', 8000, app)
httpd.serve_forever()
正如你所看到的,WSGI,可以重複使用在不同的環境中應用程序 - CGI,SCGI,FastCGI的,mod_wsgi,mod_python等,而不需要實際重寫它。
WSGI的最後一部分是中間件 - 基本上,它是一個允許您組合不同WSGI應用程序的概念。它形成了一種三明治 - 請求從頂層(網關)流向底層(通常是您的應用程序),其間有一些中間層,可以實現像數據庫連接池或會話之類的東西。 wsgiref
包含一個這樣的中間件 - wsgiref.validate.validator
,它檢查下面和上面的層是否符合WSGI規範的規則。
而基本上就是這樣。現在去使用一個框架。
嘗試直接轉到源代碼 - PEP 333,WSGI規範。
哎呀,我剛剛發現[本指南來自Armin Ronacher](http://lucumr.pocoo.org/2007/5/21/getting-started-with-wsgi/),這似乎是我一直在尋找。也推薦給其他人。我認爲,不能克服這個問題,所以要求其他人這樣做。 – ShankarG 2012-03-12 08:58:47