django 的请求处理部分----WSGIHandler 源码分析 django1.5.5
从这里拉开django框架的帷幕。。撕开,哈哈
主要涉及的类:django.core.handlers.base.BaseHandler,django.core.handlers.wsgi.WSGIHandler,前者为后者的父类。
django.http.request.HttpRequest
后者的实例实现了WSGI请求的处理,因为WSGIHandler 实现了__call__方法,所以实例成为了可调用对象。
流程:接收到一个wsgi请求--》生成一个WSGIHandler实例,传入参数environ,start_response.--》建立request对象(environ作为参数)--》调用base.BaseHandler的get_response方法(使用这个request作为参数)
这个get_response的主要作用就是各种middleware的调用,其次就是解析url到view,依据url.py中的patterns。
urlresolve是什么呢,就是从urlconf中找出第一个匹配到的view。
然后就开始middleware和view的调用了。
get_response首先将request用_requet_middleware处理一遍。
如果request_middleware返回response了,就直接结束并返回response
request_middleware循环完了当然该view_middleware了。view_middleware在view还没有被执行的时候进行处理。参数是request,view,var参数keyword参数。
接着就该真正的执行这个view了,如果在views中出错了,就进行exceptiion_middleware处理。否则返回一个response。
如果view的返回值是一个Template,那么会导致template_response_middleware的调用。参数是request和response
最后被调用的是response_middleware,参数仍然是request,response,不过这个response是Response对象了。。
注意在上面任何一步返回一个response都会导致views中的response失效。
没什么难的,源代码很清晰。。
接下来分析一下这个过程中涉及到的urlresolve过程。
django 的请求处理部分----WSGIHandler 源码分析 django1.5.5的更多相关文章
- Django的settings文件部分源码分析
Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- Struts2请求处理流程及源码分析
1.1 Struts2请求处理 1. 一个请求在Struts2框架中的处理步骤: a) 客户端初始化一个指向Servlet容器的请求: b) 根据Web.xml配置,请求首先经过ActionConte ...
- Django——基于类的视图源码分析 二
源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...
- Django REST framework —— 认证组件源码分析
我在前面的博客里已经讲过了,我们一般编写API的时候用的方式 class CoursesView(ViewSetMixin,APIView): pass 这种方式的有点是,灵活性比较大,可以根据自己的 ...
- Django(60)Django内置User模型源码分析及自定义User
前言 Django为我们提供了内置的User模型,不需要我们再额外定义用户模型,建立用户体系了.它的完整的路径是在django.contrib.auth.models.User. User模型源码分析 ...
- django的RestFramework模块的源码分析
一.APIView源码分析 查看源码的前提要知道,找函数方法必须先在自己的类中找,没有再往父类找,一层一层网上找,不能直接按ctrl点击 在我们自己定义的类中没有as_view方法的函数,所以肯定是继 ...
- Django rest framework框架——APIview源码分析
一.什么是rest REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP.其目标是为了创建具有良好扩展性的分布式系统. 可用一句话 ...
- Django(55)GenericAPIView源码分析
源码分析 GenericAPIView继承自APIView,也就是在APIView基础上再做了一层封装,源码如下: class GenericAPIView(views.APIView): query ...
随机推荐
- android122 zhihuibeijing 主页面搭建
右边主页面布局设计: 文字颜色选择器和是否点击的图片选择器 路径和写法: <?xml version="1.0" encoding="utf-8"?&g ...
- a标签中关于javascript:void(0)的几个问题
最近看了好几个关于<a>标签和javascript:void(0)的帖子,谨记于此,以资查阅.注:以下代码未经全面测试,但每一种方法可能会出现的情况都基本做了说明. 在做页面时,如果想做一 ...
- 在android的spinner中,实现取VALUE值和TEXT值
为了实现在android的spinner实现取VALUE值和TEXT值,我尝试过好些办法,在网上查的资料,都是说修改适配器,刚开始我也是通过修改适配器的方法来做的,但是如果一个activity有多个s ...
- 从Eclipse里导出Android程序到手机里
参考自:http://wenku.baidu.com/view/e28bb57c1711cc7931b716a7.html
- 工作中遇到的UIScrollview的问题及解决方案
用scrollview的时候,记得创建scrollview后再在scrollview上放一个view,将其他子空间和子view都放在这个view上. 目前遇到的问题: ImagePlayerView( ...
- Redis & Sentinel 安装脚本
#!/bin/bash # 判断是否为root用户,不是root用户提示退出 if [[ $EUID -ne 0 ]]; then echo "This script. must be ...
- strstr,strchr,strtr 比较
strstr - 查找字符串的首次出现 查找 "Shanghai" 在字符串中的第一次出现,并返回字符串的剩余部分: echo strstr("I love Shangh ...
- 读jQuery官方文档:数据方法与辅助方法
数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...
- 无责任比较thrift vs protocol buffers
http://blog.csdn.net/socoolfj/article/details/3855007 最新版本的Hadoop代码中已经默认了Protocol buffer作为RPC的默认实现,原 ...
- SecureCRT 7.3.4 安装以及破解
1-9为 SecureCRT 7.3.4 安装图解:10-13是 SecureCRT 7.3.4 破解图解,心急的朋友可以直接向下拉. 以下是百度百科对 SecureCRT 的介绍: SecureCR ...