LOGODjango的HTTP请求机制瓜瓜版权所有,翻版请客请求的处理流程1.加载配置Django的配置都在“Project/settings.py”中定义2.启动最核心动作的是通过django.core.management.commands.runfcgi的Command来启动,它运行django.core.servers.fastcgi中的runfastcgi,runfastcgi使用了flup的WSGIServer来启动fastcgi。而WSGIServer中携带了django.core.handlers.wsgi的WSGIHandler类的一个实例,通过WSGIHandler来处理由Web服务器(比如Apache,Lighttpd等)传过来的请求,此时才是真正进入Django的世界。3.处理Request当有HTTP请求来时,WSGIHandler就开始工作了,它从BaseHandler继承而来。WSGIHandler为每个请求创建一个WSGIRequest实例,而WSGIRequest是从http.HttpRequest继承而来。接下来就开始创建Response了。4.创建ResponseBaseHandler的get_response方法就是根据request创建response,而具体生成response的动作就是执行urls.py中对应的view函数了,这也是Django可以处理“友好URL”的关键步骤,每个这样的函数都要返回一个Response实例。此时一般的做法是通过loader加载template并生成页面内容,其中重要的就是通过ORM技术从数据库中取出数据,并渲染到Template中,从而生成具体的页面了。5.处理ResponseDjango返回Response给flup,flup就取出Response的内容返回给Web服务器,由后者返回给浏览器。这个处理器(handler)导入你的Django配置文件。2这个处理器导入Django的自定义异常类3这个处理器调用它自己的load_middleware方法,加载所有列在MIDDLEWARE_CLASSES中的middleware类并且内省它们。返回工作分析1.遍历处理器的_request_middleware实例变量2.调用其中的每一个方法3.传入HttpRequest的实例作为参数4.然后处理器进入response阶段返回的解析1.搜索匹配的URL2.如果这个URL有include?3.返回3个条目1.指定的viewfunction2.view的位置参数3.关键字参数字典返回请求中出现的异常出现异常的原因:1.view可能没有返回值。2.view可能产生了异常但没有一个middleware能处理它。3.一个middleware方法试图处理一个异常时自己又产生了一个新的异常。出现异常后:get_response会回到自己的异常处理机制中,剩下的事情版权所有,翻版请客