Django——基于类的视图源码分析 三
列表类通用视图(list.py)
此文件包含用于显示数据列表常用的类和工具类。不仅可以方便的用于显示基于模型(Model)的数据列表,也可以用于显示自定义数据列表。

此图中绿色部分属于base.py,引入此图中是为了说明他们之间的关系
MultipleObjectMixin
最主要的核心工具类,主要的算法和接口全部都在这个工具类中实现。
- 属性
allow_empty 默认值True。表示没有数据时显示空列表;否则将会产生一个404错误。
queryset 产生数据的queryset实例或"类queryset"数据列表。
model 关联的模型类。
paginated_by 分页的每页数据项数。默认不起用分页。
context_object_name 保存到context中的对象名称。默认是$(model)_list。
paginator_class 默认值Paginator。分页处理器。
- 方法
get_queryset 获取用于数据显示的列表对象。可以是类queryset对象。此方法优先选择使用queryset属性。未提供queryset属性时,返回model的默认管理器。如果也没有提供model属性,将会产生ImproperlyConfigured异常。
paginate_queryset 根据需要,将queryset分页。返回(paginator, page, page.object_list, page.has_other_pages())
get_paginate_by 返回每页数据项数。None表示不分页。
get_paginator 返回分页器
get_allow_empty 参见allow_empty属性说明
get_context_object_name 参见context_object_name属性说明
get_context_data 设置视图的附加属性。通常重写此方法来为视图提供附加数据。
默认设计的视图数据:
'paginator': 分页器,
'page_obj': 页对象,
'is_paginated': 是否进行了分页,
'object_list': 视图的数据
BaseListView
视图列表基类。继承自MutipleObjectMixin和View。这是一个抽象类。此函数通过增加get方法来整合View的处理流程和MutipleObjectMixin提供的工具函数。
MultipleObjectTemplateResponseMixin
继承自TemplateResponseMixin,并重写get_template_names方法。追加$(app_label)/$(model)_list.html作为默认模板。
ListView
本模块功能集大成者。一般都是直接继承此类,并重写MutipleObjectMixin的一些默认属性和/或方法来实现需求。
此类继承自MultipleObjectTemplateResponseMixin和BaseListView。一般来说,只需提供model属
性,并编写$(model)_list.html即可实现数据列表功能。如需分页可以重写paginated_by属性,指定每页数据项数目。
Django——基于类的视图源码分析 三的更多相关文章
- Django——基于类的视图源码分析 二
源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...
- Django——基于类的视图源码分析 一
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- Django的settings文件部分源码分析
Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- tomcat源码分析(三)一次http请求的旅行-从Socket说起
p { margin-bottom: 0.25cm; line-height: 120% } tomcat源码分析(三)一次http请求的旅行 在http请求旅行之前,我们先来准备下我们所需要的工具. ...
- Django 基于类的视图(CBV)执行流程 CBV 源码分析
一.CBV(基于类的视图) 视图是可以调用的,它接受请求并返回响应,这不仅仅是一个函数,Django提供了一些可以用作视图的类的例子,这些允许您通过继承或mixin来构建视图并重用代码. 基本示例 D ...
- django CBV视图源码分析
典型FBV视图例子 url路由系统 from django.conf.urls import url from django.contrib import admin from luffycity.v ...
- Django REST framework —— 认证组件源码分析
我在前面的博客里已经讲过了,我们一般编写API的时候用的方式 class CoursesView(ViewSetMixin,APIView): pass 这种方式的有点是,灵活性比较大,可以根据自己的 ...
随机推荐
- k8s通过configmap管理应用配置信息
Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap. ConfigMap 的创建和使用方式与 Secret 非常类 ...
- SQL查询中in和exists的区别分析
select * from A where id in (select id from B); select * from A where exists (select 1 from B where ...
- 微信小程序开发参考资料汇总
不错的微信小程序入门教程:微信小程序入门二: 条件.遍历.网络请求.获取本地图片http://blog.csdn.net/lecepin/article/details/54016701 微信小程序入 ...
- MySQL的事务理解
在学习事务这一概念前,我们需要需要构思一个场景 场景构思 假设该场景发生于一个银行转账背景下,月中,又到了发工资的日子.学校打算给A老师发放一个月的工资.(此处,我们假设转账都是由人工操作的),整个过 ...
- sonarQube Github pull request扫描代码
参考官方地址:https://docs.sonarqube.org/display/PLUG/GitHub+Plugin 运行环境:sonarQube6.2 + sonarScanner2.8 近来, ...
- scrapy xpath 从response中获取li,然后再获取li中img的src
lis = response.xpath("//ul/li") for li in lis: src = li.xpath("img/@src") # 如果xp ...
- flutter 极光推送
一.配置极光开发者 1.注册极光开发者 https://www.jiguang.cn/push 2.创建应用 二.创建APP 1.添加依赖 pubspec.yaml 添加: flutter_jpus ...
- java应用高cpu占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环 排查故障如下: 1.根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障 2.通过ps ...
- [BZOJ 4720] 换教室
Link: BZOJ 4720 传送门 Solution: 2016年$NOIP$考的一道语文题 题面虽长,但思路并不难想 对于这类期望问题,大多数时候都用期望$dp$来解决 根据询问:在$n$个时间 ...
- [POI2018]Prawnicy
题目大意: 有$n(n\le10^6)$个线段,每个线段覆盖的范围是$[l_i,r_i]$,要求从中选取$k(k\le10^6)$个线段使得这些线段覆盖范围的交集最大,求最大交集及任意一种方案. 思路 ...