七.数据分页原理,paginator与page对象
1.分页:
Paginator对象
Page对象
1.小案例:一次建立1000个用户:
(python36env) [vagrant@CentOS7 devops]$ python manage.py shell
In [1]: from django.contrib.auth.models import User
In [2]: username = "rock"
In [3]: for i in range(1000):
...: name = "{}_{}".format(username, i)
...: User.objects.create_user(name, "{}@51reboot.com".format(name), "123456")
2.查询用户
In [2]: User.objects.all() 查询出所有用户/只是不会全列完
In [3]: User.objects.all()[:10] 前十条
In [4]: queryset = User.objects.all()[:10] -->1.取数据
In [5]: queryset.values() 这样就可把所有的数据转换出来如下图

In [10]: queryset.values("username", "email") --->2.取部分字段
<QuerySet [{'username': 'devops', 'email': '123@qq.com'}, {'username': 'rock', 'email': 'rock@51reboot.com'}, {'username': 'rock_0', 'email': 'rock_0@51reboot.com'},。。。。。}]>
In [11]: list(queryset.values("username", "email")) --->3.转换成json(这样的数据可直接给httpresponse对象)再返回给浏览器
Out[11]:
[{'username': 'devops', 'email': '123@qq.com'},
{'username': 'rock', 'email': 'rock@51reboot.com'},
{'username': 'admin', 'email': 'admin@51reboot.com'},
{'username': 'rock_0', 'email': 'rock_0@51reboot.com'},
3.我要的是在前端传第几页?page参数就能返回第几页的数据:
1.拿到page => str类型 要转int
2.获取数据:
User.objects.all()
3.对数据进行处理,分页--根据传的page值来计算切片的开头和结尾:
queryset = User.objects.all()[start:end]
4.转json:
ret = list(queryset.values("id","username","email"))
5.返回httpresponse对象:
views.py中:
from django.views import View
class MyView(View):
def get(self,request,*args,**kwargs):
per = 10
try:#转的过程可能会出错如果出错就让page等于1
page = int(request.GET.get("page",1))
except:
page = 1
end = page * 10
start = end - 10
queryset = User.objects.all()[start:end]
data = list(queryset.values("id","username","email"))
return JsonResponse(data, safe=False)
dashboard/urls.py中:
from django.conf.urls import include, url
from .views import MyView
urlpatterns = [
url(r'^hello/', MyView.as_view()),
]
启动效果如图:

4.分页面展示出提示搜索结果有多少条记录/共有多少页/下上一页/首页/尾页---paginator对象
https://devdocs.io/ 神奇的文档网,可以在此参考
(python36env) [vagrant@CentOS7 devops]$ python manage.py shell
In [13]: queryset = User.objects.all()
In [14]: from django.core.paginator import Paginator
In [15]: paginator = Paginator(queryset, 10) 实例化对象
In [16]: paginator.count 总共有多少条
Out[16]: 1003
In [17]: paginator.num_pages 总共有多少页
Out[17]: 101
In [18]: paginator.page_range 页码范围
Out[18]: range(1, 102)
In [19]: page = paginator.page(10) #实例化page对象当前页是第十页
In [20]: page.number
Out[20]: 10
In [21]: page.next_page_number()
Out[21]: 11
七.数据分页原理,paginator与page对象的更多相关文章
- 15 ~ express ~ 用户数据分页原理和实现
一,在后台路由 /router/admin.js 中 1,限制获取的数据条数 : User.find().limit(Number) 2,忽略数据的前(Number)条数据 : skip(Number ...
- ThinkPHP数据分页Page.class.php
获取分页类 ThinkPHP提供了数据分页的扩展类库Page,能够在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.t ...
- 在pycharm中批量插入表数据、分页原理、cookie和session介绍、django操作cookie
昨日内容回顾 ajax发送json格式数据 ''' 1. urlencoded 2. form-data 3. json ''' 1. ajax $.ajax({ data: JSON.stringi ...
- Mybatis的分页插件PageHelp:Page对象中的pageSize等属性无法序列化,无法转换为json字符串
Page<User> page = new Page<>(); User user = new User(); user.setAge(20); ...
- django orm 分页(paginator)取数据出现警告manage.py:1: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class 'sign.models.Guest'> QuerySet.
使用django的orm做分页(Paginator)时出现了下面的警告 In [19]: p=Paginator(guest_list,2) manage.py:1: UnorderedObjectL ...
- 使用Puppeteer进行数据抓取(二)——Page对象
page对象是puppeteer最常用的对象,它可以认为是chrome的一个tab页,主要的页面操作都是通过它进行的.Google的官方文档详细介绍了page对象的使用,这里我只是简单的小结一下. 客 ...
- 重新学习MySQL数据库3:Mysql存储引擎与数据存储原理
重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有 ...
- Django——分页功能Paginator
Django分页功能----Paginator Paginator所需参数: Paginator(object_list,per_page) Paginator常用属性: per_page: 每页显示 ...
- Django分页组件——Paginator
from django.core.paginator import Paginator #导入Paginator objects = ['john','paul','george','ringo',' ...
随机推荐
- Java实现 蓝桥杯VIP 算法提高 P0404
计算一个无符号整数的阿尔法乘积.对于一个无符号整数x来说,它的阿尔法乘积是这样来计算的:如果x是一个个位数,那么它的阿尔法乘积就是它本身:否则的话,x的阿尔法乘积就等于它的各位非0的数字相乘所得到的那 ...
- Java实现 洛谷 P1023 税收与补贴问题
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in = n ...
- 如何监控 Linux 服务器状态?
Linux 服务器我们天天打交道,特别是 Linux 工程师更是如此.为了保证服务器的安全与性能,我们经常需要监控服务器的一些状态,以保证工作能顺利开展. 本文介绍的几个命令,不仅仅适用于服务器监控, ...
- C#通过模板导出Word的两种方法(超简单)
方法一:使用Office的组件 使用该方法必须要安装Office 1.制作Word模板 在需要填充内容的地方增加标识符号,方便之后替换使用,例如 [项目名称],其中[]符号和中间的文字可根据个人情况进 ...
- hadoop知识整理(2)之MapReduce
之前写的关于MR的文章的前半部分已丢. 所以下面重点从3个部分来谈MR: 1)Job任务执行过程,以及主要进程-ResourceManager和NodeManager作用: 2)shuffle过程: ...
- JAVA 代码查错
1.abstract class Name { private String name; public abstract boolean isStupidName(String name){}} 大侠 ...
- [xDebug] php下的Debug的调试
基础知识 对于php来说,debug的话,有个东西叫xdebug,当然配置这个时候,特别在mac下出了很多坑,这里强烈推荐一个mac下类似phpstudy的东西,叫做MxSrvs,了解一下? Xdeb ...
- Edge浏览器现已支持Tampermonkey(油猴)
Tampermonkey,Greasemonkey,这种扩展可以让我们的浏览器自动运行我们自己定义的脚本,然后就出现了相关网站(比如https://greasyfork.org/zh-CN)让大家在上 ...
- 多线程实现tcp聊天服务器
多线程tcp server & client tcp服务端(多线程): from socket import * from threading import Thread def clien ...
- TensorFlow从0到1之浅谈深度学习(10)
DNN(深度神经网络算法)现在是AI社区的流行词.最近,DNN 在许多数据科学竞赛/Kaggle 竞赛中获得了多次冠军. 自从 1962 年 Rosenblat 提出感知机(Perceptron)以来 ...