gpt4 book ai didi

python - 需要一本好的初学者 WSGI 指南

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:36 25 4
gpt4 key购买 nike

我有一个几乎完整的简单 Web 应用程序,它是用 Python CGI 脚本编写的。我想将其更改为使用 WSGI,但我找不到帮助我理解 WSGI 实际是什么的文档(一个人只反复发现与 start_response 等的调用,但似乎没有太多解释这些是什么调用实际上做)。有人可以给我一个很好的解释,以及使用 WSGI 的方法吗?

编辑:应该补充说我见过this question但答案似乎仍然没有告诉人们如何在直接脚本中(而不是在框架中)使用 WSGI。

最佳答案

WSGI 是 PEP 333 (和 Python 3 的 PEP3333),又名 Web 服务器网关接口(interface)。它包含三个部分,但您感兴趣的部分是如何编写 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 应用程序的概念。它形成了一种三明治——请求从顶部(网关)流向底部(通常是您的应用程序),中间有一些中间层,可以实现数据库连接池或 session 之类的东西。 wsgiref 包含一个这样的中间件 — wsgiref.validate.validator,它检查它下面和上面的层是否符合 WSGI 规范的规则。

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

关于python - 需要一本好的初学者 WSGI 指南,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com