Django 源码小剖: 响应数据 response 的返回
2013-09-24 10:16
381 查看
Django 源码小剖: 响应数据 response 的返回
响应数据的返回
在 WSGIHandler.__call__(self, environ, start_response) 方法调用了 WSGIHandler.get_response() 方法, 由此得到响应数据对象 response. 如今所要做的, 便是将其返回给客户端. 在 Django 源码小剖: 初探 WSGI 中, 简要的概括了请求到来时 django 自带服务器的执行关系, 摘抄如下:make_server() 中 WSGIServer 类已经作为服务器类, 负责接收请求, 调用 application 的处理, 返回相应;
WSGIRequestHandler 作为请求处理类, 并已经配置在 WSGIServer 中;
接着还设置了 WSGIServer.application 属性(set_app(app));
返回 server 实例.
接着打开浏览器, 即发起请求. 服务器实例 WSGIServer httpd 调用自身 handle_request() 函数处理请求. handle_request() 的工作流程如下:请求-->WSGIServer 收到-->调用 WSGIServer.handle_request()-->调用 _handle_request_noblock()-->调用 process_request()-->调用 finish_request()-->finish_request() 中实例化 WSGIRequestHandler-->实例化过程中会调用 handle()-->handle() 中实例化 ServerHandler-->调用 ServerHandler.run()-->run() 调用 application() 这才是真正的逻辑.-->run() 中在调用 ServerHandler.finish_response() 返回数据-->回到 process_request() 中调用 WSGIServer.shutdown_request() 关闭请求(其实什么也没做)
事实上, WSGIServer 并没有负责将响应数据返回给客户端, 它将客户端的信息(如最重要的客户端 socket 套接字)交接给了 WSGIRequestHandler, WSGIRequestHandler 又将客户端的信息交接给了 ServerHandler, 所以 ServerHandler 产生响应数据对象后, 会直接返回给客户端.
代码剖析
从「调用 ServerHandler.run()-->run() 调用 application() 这才是真正的逻辑.-->run() 中在调用 ServerHandler.finish_response() 返回数据」开始说起, 下面是主要的代码解说:?
阶段性的总结
请求到来至数据相应的流程已经走了一遍, 包括 django 内部服务器是如何运作的, 请求到来是如何工作的, 响应数据对象是如何产生的, url 是如何调度的, views.py 中定义的方法是何时调用的, 响应数据是如何返回的...另外还提出了一个更好的 url 调度策略, 如果你有更好的方法, 不忘与大家分享.我已经在 github 备份了 Django 源码的注释: Decode-Django, 有兴趣的童鞋 fork 吧.
捣乱 2013-9-23
http://daoluan.net
相关文章推荐
- Django 源码小剖: 响应数据 response 的返回
- django 使用HttpResponse返回json数据为中文
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案
- django 返回json数据
- spring mvc@Responsebody注解 对返回json格式数据的支持
- 关于response返回json格式的数据
- ###(很难找的页面错误)查询操作不需要 返回 操作成功后失败。【方法不能同时执行两个response返回两次数据。导致页面显示数据失败】
- 从源码分析struts2中返回json数据的原理
- Spring MVC使用@ResponseBody返回JSON数据406以及乱码问题解决方案
- springmvc @ResponseBody 返回json数据错误
- Django的render_to_response返回的变量转义问题解决
- getResponseCode获取URL响应状态码 HTTP状态返回码
- Django-restframework03 请求和响应(request和response)
- spring MVC 3.1 注解:@ResponseBody 返回json数据
- django views视图函数返回值 return redirect httpresponse总结
- 利用ResponseBodyAdvice处理返回数据
- python 接口测试response返回数据对比
- spring4.1.5 @ResponseBody返回JSON数据406
- spring 3 mvc 的 @ResponseBody返回数据中文乱码
- springmvc @ResponseBody 返回json数据错误