1

我编辑了我的问题,因为我意识到我正在结合两个概念(WSGIHandler 和中间件),我不应该在这个问题中结合。


我试图对它的作用有一些基本的了解WSGIHandler

django.core.handlers.wsgi.py

类 WSGIHandler(base.BaseHandler): initLock = Lock() request_class = WSGIRequest

def __call__(self, environ, start_response):

    #...

    start_response(status, response_headers)
    return response

WSGIHandler将使用environstart_response参数调用的实例。
environ将用于创建request对象,该对象是WSGIRequest.

request = self.request_class(environ)

WSGIHandler.get_response将用于HttpResponserequest.

response = self.get_response(request)

我的问题:
做 什么start_response?此时response已经创建了一个对象。那么它开始的反应是什么?它会在某处发送一些响应吗?它在哪里发送由发送的响应return response(即通常调用它的内容是什么?)?

4

1 回答 1

3

当你编写一个 web 应用程序时,你需要向服务器提供callable一个请求到达时服务器将调用的服务器。此可调用对象负责生成响应并将响应发送回服务器。服务器依次将此响应发送回浏览器。

在 django 的情况下,可调用的是WSGIHandler. 由于它有一个__call__定义,所以这__call__将被服务器调用。

发送到的参数__call__来自服务器。start_response也是由服务器实现的可调用对象。您无需担心其实施。所以,__call__调用WSGIHandler这个 callable start_response

start_response在内部创建标头,稍后必须将其发送回浏览器。但它只是在服务器上设置一些属性,它不会将响应发送回浏览器。它不会在任何地方发送任何响应。

调用后start_response,wsgi 处理程序返回行中的实际响应return response。执行此行时,服务器会检查响应是否正确,然后根据响应发送start_response调用中设置的 cookie 或引发一些异常。

检查http://www.python.org/dev/peps/pep-0333/了解更多信息。

于 2013-04-22T15:42:15.397 回答