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

Stella981
• 阅读 783

源码分析

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

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

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

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中直接指定此参数。

如:

<!-- 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.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
mysql(视图 事务 索引 外键)
视图视图本质就是对查询的封装创建视图(定义视图 起名以v\_开头)createviewv\_studentsasselectclasses.nameas c\_name,students.\fromstudentsinnerjoinclassesonstudents.cls\_idclasses.id;查
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Django 基于类的视图源码分析 一
基于类的视图(Classbasedview)是Django1.3引入的新的视图编写方式,用于取代以前基于函数(Functionbased)方式。借助于OO和Python中方便的多重继承特性,基于类的视图可以提供更好的抽象与复用能力。新的通用视图将更加优雅。Django的文档较为丰富,但在实际开发中往往仍显得不够,很多时候还是需要深入到源代码当
Stella981 Stella981
3年前
Django的rest_framework认证组件之局部设置源码解析
前言:  Django的rest\_framework组件的功能很强大,今天来我来给大家剖析一下认证组件下面进入正文分析,我们从视图开始,一步一步来剖析认证组件1、进入urls文件url(r'^login/',views.LoginCBV.as_view(),name"login"),2、然后执行LoginCBV这个类的as\
Stella981 Stella981
3年前
Django 基于类的视图源码分析 三
列表类通用视图(list.py)此文件包含用于显示数据列表常用的类和工具类。不仅可以方便的用于显示基于模型(Model)的数据列表,也可以用于显示自定义数据列表。!list.py类图(http://static.oschina.net/uploads/space/2013/0219/161042_iKka_233
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这