源码分析
抽象类和常用视图(base.py)
这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图(RedirectView)。
View及View的执行顺序
View是所有基于类的视图的基类。仅实现了一些基本的方法和必要的检查工作。其中最重要的是dispatch方法。再次方法中,根据HTTP请求中的method参数,调用相应的同名处理函数。这里留下了一个口子,后续的类需要根据自己的情况来填补这个口子最终完成一个视图的处理。
- 属性
- http_method_names 定义所有的Http metho['get','post','put','delete','head','options','trace']。
- 方法
- init 初始化方法
由URLConf调用。包含将关键字参数存入实例属性等功能。
如果一个视图包含一个实例属性,且在urlpattern中设置了相应的值。将配置的值赋给视图对象的方法就是由URLConf调用__init__函数时作为参数传入。View.__init__负责具体的赋值工作。
as_view 类方法(classonlymethod)。返回Function-based视图函数对象。返回的视图函数对象("在被调用时")负责实例化视图,调用视图的dispatch方法。
dispatch 调度函数。根据Http method调用视图的同名函数
http_method_not_allowed 返回不被允许的http method处理函数
TemplateResponseMixin
提供使用模版渲染的工具类。template_name参数用于指定模版。希望具备模版功能的视图可以直接继承此工具累计可。不过我们很少直接在自己的视图中继承此工具类,因为Django已经提供了一组有用的视图来减少我们的工作。
TemplateView
基于模版的视图 。需要提供附加数据,可以在继承此视图的子类中,重写get_context_data方法。常用于诸如"about","copyrights" ,"terms"等基于文本的静态内容。只需设置template_name即可。甚至直接可以在URLConf中直接指定此参数。
如:
<!-- 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.