gpt4 book ai didi

python - 为什么 WSGI 必须使用 start_response 并返回一个迭代器?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:01 25 4
gpt4 key购买 nike

非 WSGI 方式:

def my_view(request):
request.start_response('200 OK')
request.send_header('Content-Type', 'text/plain')
request.end_headers()
request.write('Hello World!')
request.write('Goodbye World!')
request.end()

WSGI 方式:

def my_view(environ, start_response):
def generate():
yield 'Hello World!'
yield 'Goodbye World!'
start_response('200 OK', [('Content-Type', 'text/plain')])
return generate()

代码来自this blog ,虽然我不是很明白..

从上面可以看出,非 WSGI 看起来容易多了。而且 WSGI 看起来很困惑。为什么 start_reponse 必须在 my_view 中传递?为什么 my_view 必须返回一个迭代器? WSGI方式的request对象在哪里?

有人对此有想法吗?

最佳答案

简单的回答是:它必须是这样的,因为 WSGI 是这样指定的。 ;-)

start_response() 在两个示例中都被传递,在第一个示例中它只是与 request 对象“捆绑”并且 WSGI 将环境变量与可调用对象分开以启动一个回应。

返回可迭代对象可以更轻松地以惰性方式生成响应并链接多个中间件,而无需一次将整个内容从一个中间件移交给下一个中间件。生成器函数并不是最简单的解决方案,因为返回值必须是可迭代的,而不是迭代器本身,甚至不是生成器。所以这将是 WSGI 应用程序的最小示例:

def app(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain')])
return ['Hello world!\n']

我认为这看起来实际上比非 WSGI 示例更简单、更容易。

关于python - 为什么 WSGI 必须使用 start_response 并返回一个迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24666809/

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