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