文档章节

Django基于类的视图

人间四月
 人间四月
发布于 2016/04/11 15:12
字数 578
阅读 80
收藏 0
django 1.8 官方文档翻译: 3-4-1 基于类的视图
https://segmentfault.com/a/1190000003506222


基于类的视图

视图是一个可调用对象,它接受一个请求然后返回一个响应。

基于类的视图优点

  1. HTTP方法(GET、POST等)可有有个字的方法,而不是通过条件分支来解决。
  2. 面向对象的技术,例如Mixin(多继承)可以将代码分解成可重用的组件。

使用基于类的视图

使用基于类的视图的核心是允许你使用不同实例方法来形影不同的HTTP请求方法,而不是在一个视图函数中使用条件分支代码来实现。

因为Django的URL解析器将请求和关联的参数发送给一个可刁颖的函数儿不是一个雷,所以基于类的视图有一个as_view()类方法类作为类的可调用入口。改as_view()入口点创建类的一个实例并调用dispatch()方法。diapatch查看请求是GET还是POST等等,并将请求转发给相应的方法,如果发方法没有定义则引发HttpResponseNotAllowed。

设置了类的属性:

  1. Python标准的方式,子类化并在子类中覆盖属性和方法。
  2. 在URLconf中用as_view()调用的关键字参数配置类的属性。
    urlpatterns = [
        url(r'^about/', GreetingView.as_view(greeting="G'day")),
    ]



       对于每个请求都会实例化类的一个实例,但是as_view()入口点设置的类属性值在URl第一次导入时配置。

使用Mixin

  1. Mixin 是重用多个类的代码的一种极好的方法,但是它们需要一些代价。代码在Mixin 中越分散,子类将越难阅读并知道它的行为;如果你的继承很深,将难以知道应该覆盖哪一个Mixin 的方法。
  2. 只能继承一个通用视图——也就是说,只能有一个弗雷继承View,其他的弗雷必须是Mixin。继承多个继承自View类将不能像预期的那样动作。

封装as_view()的Mixin

将共同的行为运用于多个类的一种方法是编写一个封装as_view()的方法Mixin。



© 著作权归作者所有

共有 人打赏支持
人间四月
粉丝 2
博文 74
码字总数 30455
作品 0
朝阳
程序员
Django 基于类的视图源码分析 一

基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式。借助于OO和Python中方便的多重继承特性,基于类的视图可以提供更好的抽象与...

XuYuan
2013/02/05
0
0
django类视图浅析

在Django1.3之前,通用视图是以函数的方式来实现的。基于函数的实现已经不 建议使用,建议使用这里介绍的基于类的实现方式。 基于类的通用视图(以及任何继承了Django提供的基础类的基于类的...

人间四月
2016/04/19
14
0
django 1.8 官方文档翻译: 3-4-5 内建基于类的视图的API

内建基于类的视图的API 基于类的视图的API 参考。另请参见基于类的视图 的简介。 基础视图 通用的显示视图 通用的编辑视图 通用的日期视图 基于类的视图的Mixins 基于类的通用视图 —— 索引...

apachecn_飞龙
2015/08/30
0
0
Django 之 基于类的视图源码分析

基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式。 借助于OO和Python中方便的多重继承特性,基于类的视图可以提供更好的抽象...

首席安全砖家
2013/06/11
0
0
LET'S DJ:web.py无缝迁移到django

DO: 前提是必须要配置好django使用jinja2模版,保持与老项目模版引擎一致。 Django通用视图最基础的类是View,其他如TemplateView、RedirectView等都继承自它,具体用法参见:Django 通用视...

cwalet
2016/04/29
241
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法 set:function(key,val,time){ var date = new Date(); //获取当前时间 var expiresDays = time; //将date设置为n天以后的时间...

小丶二
4分钟前
0
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
6分钟前
0
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
8分钟前
0
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
16分钟前
0
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
19分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部