Django——基于类的视图源码分析 一
2014-10-20 18:28
274 查看
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式。
借助于OO和Python中方便的多重继承特性,基于类的视图可以提供更好的抽象与复用能力。 新的通用视图将更加优雅。
Django的文档较为丰富,但在实际开发中往往仍显得不够,很多时候还是需要深入到源代码当中一探究竟。为此,仔细整理了一下基于类的视图的实现方式。期望对以后的开发能够提供更加清晰、直接的参考。
说明:
Django大量应用了多重继承特性。将一些通用的功能性代码拆分混入类(Mixin),需要这些混入类的代码时,只需要将混入类加入到类的继承列表中即
可——请注意顺序,左侧的类具有较高权限,将覆盖右侧继承类中的同名函数。为了说明方便,将这些混入类(Mixin)成为"工具类”。
base.py 保存视图的抽象类,TemplateView和RedirectView,及工具类TemplateResponseMixin的代码
create_update.py 基于函数的通用视图。已标记为deprecated
date_based.py 基于函数的日期相关通用视图。已标记为deprecated
dates.py 新的基于类的日期相关通用视图。用于取代date_based.py
detail.py 基于类的单个对象显示相关的视图和工具类
edit.py 基于类的对象编辑相关的视图和工具类
list.py 基于类的对象列表显示相关视图和工具类
list_detail.py 基于函数的列表、显示函数。已标记为deprecated
simply.py 基于函数的工具常用工具试图。已标记为deprecated
从逻辑上来看,源代码被组织为抽象基类,工具类(Mixin),常规(具体)实现和基于模型的实现。
借助于OO和Python中方便的多重继承特性,基于类的视图可以提供更好的抽象与复用能力。 新的通用视图将更加优雅。
Django的文档较为丰富,但在实际开发中往往仍显得不够,很多时候还是需要深入到源代码当中一探究竟。为此,仔细整理了一下基于类的视图的实现方式。期望对以后的开发能够提供更加清晰、直接的参考。
说明:
Django大量应用了多重继承特性。将一些通用的功能性代码拆分混入类(Mixin),需要这些混入类的代码时,只需要将混入类加入到类的继承列表中即
可——请注意顺序,左侧的类具有较高权限,将覆盖右侧继承类中的同名函数。为了说明方便,将这些混入类(Mixin)成为"工具类”。
源码组织
所有的视图相关代码,均存放与django/views/generic目录中:base.py 保存视图的抽象类,TemplateView和RedirectView,及工具类TemplateResponseMixin的代码
create_update.py 基于函数的通用视图。已标记为deprecated
date_based.py 基于函数的日期相关通用视图。已标记为deprecated
dates.py 新的基于类的日期相关通用视图。用于取代date_based.py
detail.py 基于类的单个对象显示相关的视图和工具类
edit.py 基于类的对象编辑相关的视图和工具类
list.py 基于类的对象列表显示相关视图和工具类
list_detail.py 基于函数的列表、显示函数。已标记为deprecated
simply.py 基于函数的工具常用工具试图。已标记为deprecated
从逻辑上来看,源代码被组织为抽象基类,工具类(Mixin),常规(具体)实现和基于模型的实现。
相关文章推荐
- Django——基于类的视图源码分析 三
- Django 基于类的视图源码分析 三
- Django——基于类的视图源码分析 二
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
- Django Rest Framework----ModelViewSet视图 ModelViewSet源码分析
- Django-深度分析Django基于类的视图(1)(翻译)
- Django源码分析3:处理请求wsgi分析与视图View
- Django基于Pycharm开发之四[关于静态文件的使用,配置以及源码分析](原创)
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[二]
- DM365的BSP源码分析-基于2.6.18内核
- android camera 源码分析(基于应用)
- 基于XMPP协议的aSmack源码分析【1】
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[一]
- HashSet及LinkedHashSet源码分析(基于JDK1.6)
- 基于XMPP协议的aSmack源码分析【3】register过程分析
- TreeMap源码分析——基础分析(基于JDK1.6)
- TreeMap源码分析——深入分析(基于JDK1.6)
- ArrayList源码分析(基于JDK1.6)
- View视图框架源码分析之一:android是如何创建一个view
- 基于mjpg-streamer-r63的源码分析之:基础知识详细解释[一]