Python 需要一个好的初学者';s WSGI指南

Python 需要一个好的初学者';s WSGI指南,python,wsgi,Python,Wsgi,我有一个几乎完整的简单web应用程序,它是用Python CGI脚本编写的。我想将它改为使用WSGI,但我找不到帮助我理解WSGI实际是什么的文档(人们只会反复查找带有start\u响应等的调用,但似乎没有太多关于这些调用实际做什么的解释)。有人能给我一个很好的解释,再加上如何使用WSGI吗 编辑:应该补充一点,我已经看到了,但答案似乎仍然没有告诉人们如何在直接脚本中使用WSGI(而不是在框架中)。试着直接转到源代码,即WSGI规范。WSGI是(对于Python 3),一种Web服务器网关接口。

我有一个几乎完整的简单web应用程序,它是用Python CGI脚本编写的。我想将它改为使用WSGI,但我找不到帮助我理解WSGI实际是什么的文档(人们只会反复查找带有start\u响应等的调用,但似乎没有太多关于这些调用实际做什么的解释)。有人能给我一个很好的解释,再加上如何使用WSGI吗


编辑:应该补充一点,我已经看到了,但答案似乎仍然没有告诉人们如何在直接脚本中使用WSGI(而不是在框架中)。

试着直接转到源代码,即WSGI规范。

WSGI是(对于Python 3),一种Web服务器网关接口。它有三个部分,但您感兴趣的部分是如何编写WSGI应用程序。WSGI应用程序是一个可调用对象,它接受两个参数并返回一个iterable对象(或者是一个生成器)

要运行应用程序,您需要WSGI的另一部分,即网关。在标准库中可以找到
wsgiref
package。它包含一个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规范的规则


基本上就是这样。现在去使用一个框架。

Oops,我刚刚找到了我想要的框架。也推荐给其他人。我想,我不能提出这个问题,所以要求别人这样做。+1提供了比我多得多的细节。对于“现在,使用框架。”;)非常感谢你给了我一个精彩的答案——我在找一个导游,但我想你已经在这里给了我答案了!现在我打算制作应用程序WSGI,然后使用一个框架。浪费了很多时间,但我是个老古董:)@ShankarG:大多数框架都隐藏了WSGI层,因为它在复杂的应用程序中可能有点麻烦。没错,我很想使用一些简单的东西,比如瓶子或烧瓶。但我希望避免过多地重写代码,您提出的关于WSGI能够使用CGI的观点似乎很诱人(尽管我还不太理解)。
from wsgiref.simple_server import make_server
from my_app import app
httpd = make_server('localhost', 8000, app)
httpd.serve_forever()