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

源码分析

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

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

base.py

View及View的执行顺序

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

  • 属性
  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调用视图的同名函数

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

TemplateResponseMixin

提供使用模版渲染的工具类。template_name参数用于指定模版。希望具备模版功能的视图可以直接继承此工具累计可。不过我们很少直接在自己的视图中继承此工具类,因为Django已经提供了一组有用的视图来减少我们的工作。

TemplateView

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

如:

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

RedirectView

重定向视图。可以说这个视图提供了完全的重定向功能。无论是http get、post、delete还是head、options都将重定向到url参数指定的地址。

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

mysql(视图 事务 索引 外键)

视图视图本质就是对查询的封装创建视图(定义视图 起名以v\_开头)createviewv\_studentsasselectclasses.nameas c\_name,students.\fromstudentsinnerjoinclassesonstudents.cls\_idclasses.id;查

Django中Admin中的一些参数配置

设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable