我编辑了我的问题,因为我意识到我正在结合两个概念(WSGIHandler和Middleware)
我不应该在这个问题中加入。
我试图对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
和environ
参数调用start_response
的实例
environ
将用于创建request
对象,该对象是WSGIRequest
的一个实例。
request = self.request_class(environ)
WSGIHandler.get_response
将用于从HttpResponse
创建request
对象。
response = self.get_response(request)
我的问题:
start_response
做了什么?到目前为止,已经创建了response
个对象。那么它的反应是什么呢?它会在某处发送一些响应吗?它在哪里发送return response
发送的响应(即通常调用它的是什么?)?
答案 0 :(得分:2)
编写Web应用程序时,需要向服务器提供callable
,服务器将在请求到达时调用该服务器。此可调用负责生成响应并将响应发送回服务器。服务器轮流将此响应发送回浏览器。
在django的情况下,可调用的是WSGIHandler
。由于它已定义__call__
,因此服务器将调用此__call__
。
发送给__call__
的参数来自服务器。 start_response
也是可调用的,由服务器实现。您无需担心其实现。因此,__call__
WSGIHandler
会调用此可调用start_response
。
start_response
在内部创建标题,稍后必须将其发送回浏览器。但它只在服务器上设置了一些属性,它不会将响应发送回浏览器。它不会在任何地方发送任何响应。
调用start_response
后,wsgi处理程序返回行return response
中的实际响应。执行此行时,服务器会检查响应是否正确,然后根据响应发送start_response
调用中设置的cookie或引发某些操作。