Django中Mixin和View组合技巧
来源:互联网 发布:程序员薪资城市排行榜 编辑:程序博客网 时间:2024/05/22 03:53
Mixin和View的职能区分为:Mixin提供数据,View提供模板和渲染。所以一般get_context_data在Mixin中,get(),post(),head()在View中。Mixin和View不是能随意组合的,必须要注意他们之间的方法的解析顺序,也就是MRO(method resolution order)。下面我列出一些常见的MRO,以便方便的使用组合。
ContextMixin:直接就是一个get_context_data,用于返回context数据。
View:会调用所有的get方法,post方法,具体是这些['get', 'post', 'put', 'delete', 'head', 'options', 'trace'],View中是没有返回一个response的,所以光继承View的话,必须要重写get等,以返回一个response。
TemplateResponseMixin:故名思议,这个Mixin会加入Template的基本信息,也就是template的名字。但是光有Template信息是没有用的,因为她没有跟View想联系起来,如果想要跟View联系起来的话必须想办法把render_to_response插进MRO的调用顺序,而且TemplateResponseMixin是没有context的信息的。有一个可以借鉴的方法就是TemplateView的做法:
看了上面的三个类我们基本上能有一个清晰的认识了,Django中Mixin和View把原来的试图函数中的三个东西分开了,模板(TemplateResponseMixin),上下文数据(ContextMixin),负责将这些联系起来的一个东西(View)
TemplateView:TemplateView就继承自TemplateResponseMixin,ContextMixin以及View,所以它的调用思路就很明确了,在其中定义一个get方法,然后通过get方法去将上面的三个东西联系在一起.我们可以看一下TemplateView的源代码
简短的三行代码就把上面的最基本的三个东西都包含了进来。接下来就可以看一些稍微高级一点的Mixin了。比如说SingleObjectMixin
SingleObjectMixin是继承字ContextMixin的,也就是说他存在返回上下文数据这个东西了,然后对其进行稍微的包装,也就是说,在上下文数据中加入了object的信息。如何获取这些信息呢,当然可以通过model,manager等等方法。如何加入object的信息呢,这里使用的是get_object方法。然后根据slug_url_kwarg和pk_url_kwarg去检索数据。具体的过程可以去参考django的官方文档,我这里是直接从源代码的角度去看的。具体的就是一个filter语句。这个SingleObjectMixin目的在于限制context数据的东西。
同样大家可以根据这样的思路去解决其他的Mixin和View的问题。只要记住三个东西分家就行了,最主要的还是templateresponse和context,然后是胶水view。在实际使用的过程中可以参考下面的这张图
这张图基本上显示出了关键的一些Mixin和View,当然我们可以自己去实现一些Mixin来加入一些自己的功能,这也就是可以发挥的地方。
- Django中Mixin和View组合技巧
- Django中Mixin和View组合技巧
- 给django view加上 import file mixin
- 诊断 Java 代码:“杀手组合”— mixin、Jam 和单元测试
- Django类视图与Mixin
- python mixin到底是什么 django
- ExtJs Plugin 和 Mixin
- Mixin编写和使用
- less和mixin
- Django View Request和Response
- Django-拆分model和view
- mixin
- mixin
- mixin
- MiXin
- sass中常用的mixin
- React中Mixin的使用
- vue中mixin的使用
- 语言实践2-驱动学习(2)驱动程序框架
- 去除WinRAR的广告
- 大数据正式20
- 经典算法---堆排序(Heapsort)
- IntelliJ IDEA (2017.3)激活
- Django中Mixin和View组合技巧
- java实现emqtt的消息发布
- httpclient
- HDOJ1405 The Last Practice(有坑)
- 2. 什么是对象
- G盘显示拒绝访问要如何办啊
- react-native-swiper 让人无语的坑
- 虚拟网卡 tun/tap口创建及介绍
- 郁闷的出纳员