Django 基于类的视图源码分析 二

源码分析

抽象类和经常使用视图(base.py)

这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图(RedirectView)。html

base.py

View及View的执行顺序

View是全部基于类的视图的基类。仅实现了一些基本的方法和必要的检查工做。其中最重要的是dispatch方法。再次方法中,根据HTTP请求中的method参数,调用相应的同名处理函数。这里留下了一个口子,后续的类须要根据本身的状况来填补这个口子最终完成一个视图的处理。python

  • 属性
  1. http_method_names 定义全部的Http metho['get','post','put','delete','head','options','trace']。
  • 方法
  1. init 初始化方法

由URLConf调用。包含将关键字参数存入实例属性等功能。函数

若是一个视图包含一个实例属性,且在urlpattern中设置了相应的值。将配置的值赋给视图对象的方法就是由URLConf调用__init__函数时做为参数传入。View.__init__负责具体的赋值工做。工具

  1. as_view 类方法(classonlymethod)。返回Function-based视图函数对象。返回的视图函数对象("在被调用时")负责实例化视图,调用视图的dispatch方法。源码分析

  2. dispatch 调度函数。根据Http method调用视图的同名函数post

  3. http_method_not_allowed 返回不被容许的http method处理函数url

TemplateResponseMixin

提供使用模版渲染的工具类。template_name参数用于指定模版。但愿具有模版功能的视图能够直接继承此工具累计可。不过咱们不多直接在本身的视图中继承此工具类,由于Django已经提供了一组有用的视图来减小咱们的工做。spa

TemplateView

基于模版的视图 。须要提供附加数据,能够在继承此视图的子类中,重写get_context_data方法。经常使用于诸如"about","copyrights" ,"terms"等基于文本的静态内容。只需设置template_name便可。甚至直接能够在URLConf中直接指定此参数。code

如:htm

<!-- lang: python -->
url(r'^about/$',TemplateView.as_view(template_name='about.html'))

RedirectView

重定向视图。能够说这个视图提供了彻底的重定向功能。不管是http get、post、delete仍是head、options都将重定向到url参数指定的地址。

permanent 属性指定是否返回永久(HTTP 301)重定向信息,不然返回临时重定向(HTTP 302),默认是true.

相关文章
相关标签/搜索